diff --git a/pom.xml b/pom.xml
index 97e759646..c10cbb7c2 100644
--- a/pom.xml
+++ b/pom.xml
@@ -272,7 +272,7 @@
Elmhurst.BUILD-SNAPSHOT
2.0.0.BUILD-SNAPSHOT
2.0.0.BUILD-SNAPSHOT
- 4.19.0
+ 4.19.2
2.0.0.RELEASE
diff --git a/spring-cloud-sleuth-dependencies/pom.xml b/spring-cloud-sleuth-dependencies/pom.xml
index c24f1265f..83114c800 100644
--- a/spring-cloud-sleuth-dependencies/pom.xml
+++ b/spring-cloud-sleuth-dependencies/pom.xml
@@ -30,7 +30,7 @@
spring-cloud-sleuth-dependencies
Spring Cloud Sleuth Dependencies
- 0.30.0
+ 0.30.3
diff --git a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java
index eae9406c4..d1a21ebda 100644
--- a/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java
+++ b/spring-cloud-sleuth-zipkin/src/main/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSender.java
@@ -51,6 +51,9 @@ final class RestTemplateSender extends Sender {
if (encoder.equals(JSON_V2)) {
this.mediaType = MediaType.APPLICATION_JSON;
this.url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "api/v2/spans";
+ } else if (this.encoding == Encoding.PROTO3) {
+ this.mediaType = MediaType.parseMediaType("application/x-protobuf");
+ this.url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "api/v2/spans";
} else if (this.encoding == Encoding.JSON) {
this.mediaType = MediaType.APPLICATION_JSON;
this.url = baseUrl + (baseUrl.endsWith("/") ? "" : "/") + "api/v1/spans";
diff --git a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java
index bf32f37e0..021ab6c5f 100644
--- a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java
+++ b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin2/sender/RestTemplateSenderTest.java
@@ -19,16 +19,20 @@ package org.springframework.cloud.sleuth.zipkin2.sender;
import java.util.stream.Stream;
import okhttp3.mockwebserver.MockResponse;
import okhttp3.mockwebserver.MockWebServer;
+import okhttp3.mockwebserver.RecordedRequest;
import org.junit.Rule;
import org.junit.Test;
import org.springframework.web.client.RestTemplate;
import zipkin2.Call;
import zipkin2.Endpoint;
import zipkin2.Span;
+import zipkin2.codec.Encoding;
+import zipkin2.codec.SpanBytesEncoder;
import static java.util.stream.Collectors.toList;
import static org.assertj.core.api.Assertions.assertThat;
import static zipkin2.codec.SpanBytesEncoder.JSON_V2;
+import static zipkin2.codec.SpanBytesEncoder.PROTO3;
public class RestTemplateSenderTest {
static final Span SPAN = Span.newBuilder()
@@ -64,9 +68,24 @@ public class RestTemplateSenderTest {
.isEqualTo("[" + new String(JSON_V2.encode(SPAN), "UTF-8") + "]");
}
+ @Test public void proto3() throws Exception {
+ server.enqueue(new MockResponse());
+ sender = new RestTemplateSender(new RestTemplate(), endpoint, PROTO3);
+
+ send(SPAN).execute();
+
+ RecordedRequest request = server.takeRequest();
+ assertThat(request.getHeader("Content-Type"))
+ .isEqualTo("application/x-protobuf");
+
+ // proto3 encoding of ListOfSpan is simply a repeated span entry
+ assertThat(request.getBody().readByteArray())
+ .containsExactly(SpanBytesEncoder.PROTO3.encode(SPAN));
+ }
+
Call send(Span... spans) {
- return sender.sendSpans(Stream.of(spans)
- .map(JSON_V2::encode)
- .collect(toList()));
+ SpanBytesEncoder bytesEncoder = sender.encoding() == Encoding.JSON
+ ? SpanBytesEncoder.JSON_V2 : SpanBytesEncoder.PROTO3;
+ return sender.sendSpans(Stream.of(spans).map(bytesEncoder::encode).collect(toList()));
}
}