diff --git a/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/brave/instrument/web/BraveHttpConfigurationTests.java b/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/brave/instrument/web/BraveHttpConfigurationTests.java index 28221975c..fa2314a92 100644 --- a/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/brave/instrument/web/BraveHttpConfigurationTests.java +++ b/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/brave/instrument/web/BraveHttpConfigurationTests.java @@ -143,7 +143,7 @@ public class BraveHttpConfigurationTests { } /** - * Shows bean aliases work to configure the same instance for both client and server + * Shows bean aliases work to configure the same instance for both client and server. */ @Test public void configuresUserProvidedHttpClientAndServerParser() { diff --git a/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/instrument/web/SkipPatternProviderConfigTest.java b/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/instrument/web/SkipPatternProviderConfigTest.java index ba88c5165..bc120be58 100644 --- a/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/instrument/web/SkipPatternProviderConfigTest.java +++ b/spring-cloud-sleuth-autoconfigure/src/test/java/org/springframework/cloud/sleuth/autoconfig/instrument/web/SkipPatternProviderConfigTest.java @@ -292,7 +292,7 @@ public class SkipPatternProviderConfigTest { } /** - * Extracts the patterns from pattern provider + * Extracts the patterns from pattern provider. */ private String extractPattern(ApplicationContext context) { SkipPatternProvider skipPatternProvider = context.getBean(SkipPatternProvider.class); @@ -300,7 +300,7 @@ public class SkipPatternProviderConfigTest { } /** - * Extracts all single patterns + * Extracts all single patterns. */ private Collection extractAllPatterns(ApplicationContext context) { return context.getBeansOfType(SingleSkipPattern.class).values().stream().map(SingleSkipPattern::skipPattern) diff --git a/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandler.java b/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandler.java index 4a4ec75bf..ac7fe3ea9 100644 --- a/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandler.java +++ b/spring-cloud-sleuth-brave/src/main/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandler.java @@ -16,6 +16,9 @@ package org.springframework.cloud.sleuth.brave.bridge; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.TraceContext; import org.springframework.cloud.sleuth.http.HttpClientHandler; @@ -30,6 +33,8 @@ import org.springframework.cloud.sleuth.http.HttpClientResponse; */ public class BraveHttpClientHandler implements HttpClientHandler { + private static final Log log = LogFactory.getLog(BraveHttpClientHandler.class); + final brave.http.HttpClientHandler delegate; public BraveHttpClientHandler( @@ -54,6 +59,12 @@ public class BraveHttpClientHandler implements HttpClientHandler { @Override public void handleReceive(HttpClientResponse response, Span span) { + if (response == null) { + if (log.isDebugEnabled()) { + log.debug("Response is null, will not handle receiving of span [" + span + "]"); + } + return; + } this.delegate.handleReceive(BraveHttpClientResponse.toBrave(response), BraveSpan.toBrave(span)); } diff --git a/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandlerTests.java b/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandlerTests.java new file mode 100644 index 000000000..f7adeb607 --- /dev/null +++ b/spring-cloud-sleuth-brave/src/test/java/org/springframework/cloud/sleuth/brave/bridge/BraveHttpClientHandlerTests.java @@ -0,0 +1,36 @@ +/* + * Copyright 2013-2020 the original author or authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.springframework.cloud.sleuth.brave.bridge; + +import brave.Tracing; +import brave.http.HttpClientHandler; +import brave.http.HttpTracing; +import org.junit.jupiter.api.Test; + +class BraveHttpClientHandlerTests { + + @Test + void should_not_throw_exception_when_response_null() { + Tracing tracing = Tracing.newBuilder().build(); + brave.http.HttpClientHandler delegate = HttpClientHandler + .create(HttpTracing.newBuilder(tracing).build()); + BraveHttpClientHandler handler = new BraveHttpClientHandler(delegate); + + handler.handleReceive(null, new BraveSpan(tracing.currentTracer().nextSpan())); + } + +}