From 74a86f9908645c8b5d4fbcd652107de446da12b4 Mon Sep 17 00:00:00 2001 From: l30thelion Date: Sat, 7 Apr 2018 20:51:21 -0400 Subject: [PATCH] Handle sleuth headers sent from spring-kafka as byte[] in Spring Cloud (#925) Similar to https://github.com/openzipkin/brave/blob/master/instrumentation/kafka-clients/src/main/java/brave/kafka/clients/KafkaPropagation.java --- .../messaging/MessageHeaderPropagation.java | 9 +++++- .../MessageHeaderPropagationTest.java | 32 +++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagation.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagation.java index 79fdc7827..47aedf2fa 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagation.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagation.java @@ -29,6 +29,7 @@ import org.springframework.messaging.support.NativeMessageHeaderAccessor; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.StringUtils; +import static java.nio.charset.StandardCharsets.UTF_8; import static org.springframework.messaging.support.NativeMessageHeaderAccessor.NATIVE_HEADERS; /** @@ -127,7 +128,13 @@ enum MessageHeaderPropagation } } Object result = accessor.getHeader(key); - return result != null ? result.toString() : null; + if (result != null) { + if (result instanceof byte[]) { + return new String((byte[]) result, UTF_8); + } + return result.toString(); + } + return null; } static void removeAnyTraceHeaders(MessageHeaderAccessor accessor, diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagationTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagationTest.java index 72ffd7c99..789576179 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagationTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/MessageHeaderPropagationTest.java @@ -19,8 +19,13 @@ package org.springframework.cloud.sleuth.instrument.messaging; import java.util.Collections; import brave.propagation.Propagation; +import org.junit.Assert; +import org.junit.Test; import org.springframework.messaging.support.MessageHeaderAccessor; +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.*; + public class MessageHeaderPropagationTest extends PropagationSetterTest { MessageHeaderAccessor carrier = new MessageHeaderAccessor(); @@ -43,4 +48,31 @@ public class MessageHeaderPropagationTest Collections.singleton(result.toString()) : Collections.emptyList(); } + + @Test + public void testGetByteArrayValue() { + MessageHeaderAccessor carrier = carrier(); + carrier.setHeader("X-B3-TraceId", "48485a3953bb6124".getBytes()); + carrier.setHeader("X-B3-TraceId", "48485a3953bb6124000000".getBytes()); + String value = MessageHeaderPropagation.INSTANCE.get(carrier, "X-B3-TraceId"); + assertEquals("48485a3953bb6124000000", value); + } + + @Test + public void testGetStringValue() { + MessageHeaderAccessor carrier = carrier(); + carrier.setHeader("X-B3-TraceId", "48485a3953bb6124"); + carrier.setHeader("X-B3-TraceId", "48485a3953bb61240000000"); + String value = MessageHeaderPropagation.INSTANCE.get(carrier, "X-B3-TraceId"); + assertEquals("48485a3953bb61240000000", value); + } + + @Test + public void testGetNullValue() { + MessageHeaderAccessor carrier = carrier(); + carrier.setHeader("X-B3-TraceId", "48485a3953bb6124"); + carrier.setHeader("X-B3-TraceId", "48485a3953bb61240000000"); + String value = MessageHeaderPropagation.INSTANCE.get(carrier, "non existent key"); + assertNull(value); + } }