From e7f50d35262c12c70719a1d804e4bca8fdc1cef6 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Wed, 17 Apr 2019 00:11:35 +0400 Subject: [PATCH] Ensures that NPE is not thrown when errormessage has no failed message fixes gh-1335 --- .../messaging/TracingChannelInterceptor.java | 3 ++- .../TracingChannelInterceptorTest.java | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java index ee81fd5f1..61c6aa6a9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptor.java @@ -395,7 +395,8 @@ public final class TracingChannelInterceptor extends ChannelInterceptorAdapter Object payload = message.getPayload(); if (payload instanceof MessagingException) { MessagingException e = (MessagingException) payload; - return e.getFailedMessage(); + Message failedMessage = e.getFailedMessage(); + return failedMessage != null ? failedMessage : message; } return message; } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java index a583d74c8..93b8dafef 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/messaging/TracingChannelInterceptorTest.java @@ -283,6 +283,28 @@ public class TracingChannelInterceptorTest { .isSameAs(errorsReplyChannel); } + @Test + public void errorMessageHeadersWithNullPayloadRetained() { + this.channel.addInterceptor(this.interceptor); + Map errorChannelHeaders = new HashMap<>(); + errorChannelHeaders.put(TraceMessageHeaders.TRACE_ID_NAME, "000000000000000a"); + errorChannelHeaders.put(TraceMessageHeaders.SPAN_ID_NAME, "000000000000000a"); + this.channel.send(new ErrorMessage(new MessagingException("exception"), + errorChannelHeaders)); + + this.message = this.channel.receive(); + + assertThat(this.message).isNotNull(); + String spanId = this.message.getHeaders().get(TraceMessageHeaders.SPAN_ID_NAME, + String.class); + assertThat(spanId).isNotNull(); + String traceId = this.message.getHeaders().get(TraceMessageHeaders.TRACE_ID_NAME, + String.class); + assertThat(traceId).isEqualTo("000000000000000a"); + assertThat(spanId).isNotEqualTo("000000000000000a"); + assertThat(this.spans).hasSize(2); + } + ChannelInterceptor producerSideOnly(ChannelInterceptor delegate) { return new ChannelInterceptorAdapter() { @Override