diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java index 079fd6428..4774b910c 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilter.java @@ -15,8 +15,6 @@ */ package org.springframework.cloud.sleuth.instrument.web.client; -import java.util.Collections; - import brave.Span; import brave.Tracer; import brave.http.HttpClientHandler; @@ -110,8 +108,7 @@ abstract class AbstractHttpHeadersFilter implements HttpHeadersFilter { private static final Propagation.Setter SETTER = new Propagation.Setter() { @Override public void put(ServerHttpRequest.Builder carrier, String key, String value) { - carrier.headers(httpHeaders -> httpHeaders.replace(key, - Collections.singletonList(value))); + carrier.headers(httpHeaders -> httpHeaders.set(key, value)); } @Override diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java index 026f8ec7d..90eae741d 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRequestHttpHeadersFilterTests.java @@ -25,7 +25,7 @@ public class TraceRequestHttpHeadersFilterTests { HttpTracing httpTracing = HttpTracing.newBuilder(this.tracing).build(); @Test - public void should_override_any_tracing_headers() { + public void should_override_span_tracing_headers() { HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set("X-B3-TraceId", "52f112af7472aff0"); @@ -46,4 +46,22 @@ public class TraceRequestHttpHeadersFilterTests { .isNotNull(); } + @Test + public void should_set_tracing_headers() { + HttpHeadersFilter filter = TraceRequestHttpHeadersFilter.create(this.httpTracing); + HttpHeaders httpHeaders = new HttpHeaders(); + MockServerHttpRequest request = MockServerHttpRequest.post("foo/bar") + .headers(httpHeaders).build(); + MockServerWebExchange exchange = MockServerWebExchange.builder(request).build(); + + HttpHeaders filteredHeaders = filter.filter(httpHeaders, exchange); + + BDDAssertions.then(filteredHeaders.get("X-B3-TraceId")).isNotEmpty(); + BDDAssertions.then(filteredHeaders.get("X-B3-SpanId")).isNotEmpty(); + BDDAssertions + .then((Object) exchange + .getAttribute(TraceRequestHttpHeadersFilter.SPAN_ATTRIBUTE)) + .isNotNull(); + } + } \ No newline at end of file