Fixes #1081: add instanceOf checks (#1082)

* Fixes #1081: add instance of checks
This commit is contained in:
Andreas Berger
2018-09-04 11:06:53 +02:00
committed by Marcin Grzejszczak
parent 5a3bb0c0e3
commit e02cea7bc0
2 changed files with 46 additions and 19 deletions

View File

@@ -79,13 +79,14 @@ enum MessageHeaderPropagation
nativeAccessor.setNativeHeader(key, value);
}
else {
Map<String, List<String>> nativeHeaders = (Map) accessor
.getHeader(NATIVE_HEADERS);
Object nativeHeaders = accessor.getHeader(NATIVE_HEADERS);
if (nativeHeaders == null) {
accessor.setHeader(NATIVE_HEADERS,
nativeHeaders = new LinkedMultiValueMap<>());
}
nativeHeaders.put(key, Collections.singletonList(value));
if (nativeHeaders instanceof Map<?, ?>) {
((Map) nativeHeaders).put(key, Collections.singletonList(value));
}
}
}
@@ -115,16 +116,16 @@ enum MessageHeaderPropagation
if (accessor instanceof NativeMessageHeaderAccessor) {
NativeMessageHeaderAccessor nativeAccessor = (NativeMessageHeaderAccessor) accessor;
String result = nativeAccessor.getFirstNativeHeader(key);
if (result != null)
if (result != null) {
return result;
}
else {
Map<String, List<String>> nativeHeaders = (Map) accessor
.getHeader(NATIVE_HEADERS);
if (nativeHeaders != null) {
List<String> result = nativeHeaders.get(key);
if (result != null && !result.isEmpty())
return result.get(0);
}
} else {
Object nativeHeaders = accessor.getHeader(NATIVE_HEADERS);
if (nativeHeaders instanceof Map) {
Object result = ((Map) nativeHeaders).get(key);
if (result instanceof List && !((List) result).isEmpty()) {
return String.valueOf(((List) result).get(0));
}
}
}
Object result = accessor.getHeader(key);
@@ -155,13 +156,11 @@ enum MessageHeaderPropagation
if (accessor instanceof NativeMessageHeaderAccessor) {
NativeMessageHeaderAccessor nativeAccessor = (NativeMessageHeaderAccessor) accessor;
nativeAccessor.removeNativeHeader(keyToRemove);
}
else {
Map<String, List<String>> nativeHeaders = (Map) accessor
.getHeader(NATIVE_HEADERS);
if (nativeHeaders == null)
continue;
nativeHeaders.remove(keyToRemove);
} else {
Object nativeHeaders = accessor.getHeader(NATIVE_HEADERS);
if (nativeHeaders instanceof Map) {
((Map) nativeHeaders).remove(keyToRemove);
}
}
}
}

View File

@@ -21,6 +21,7 @@ import java.util.Collections;
import brave.propagation.Propagation;
import org.junit.Test;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.messaging.support.NativeMessageHeaderAccessor;
import static org.junit.Assert.*;
@@ -73,4 +74,31 @@ public class MessageHeaderPropagationTest
String value = MessageHeaderPropagation.INSTANCE.get(carrier, "non existent key");
assertNull(value);
}
@Test
public void testSkipWrongValueTypeForGet() {
MessageHeaderAccessor carrier = carrier();
carrier.setHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS,
"{spanTraceId=[123], spanId=[456], spanSampled=[0]}"
);
MessageHeaderPropagation.INSTANCE.get(carrier, "X-B3-SpanId");
}
@Test
public void testSkipWrongValueTypeForRemoval() {
MessageHeaderAccessor carrier = carrier();
carrier.setHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS,
"{spanTraceId=[123], spanId=[456], spanSampled=[0]}"
);
MessageHeaderPropagation.removeAnyTraceHeaders(carrier, Collections.singletonList("X-B3-SpanId"));
}
@Test
public void testSkipWrongValueTypeForPut() {
MessageHeaderAccessor carrier = carrier();
carrier.setHeader(NativeMessageHeaderAccessor.NATIVE_HEADERS,
"{spanTraceId=[123], spanId=[456], spanSampled=[0]}"
);
MessageHeaderPropagation.INSTANCE.put(carrier, "X-B3-SpanId", "1234");
}
}