From 48777fbfed3cf93819ac383d3e1a2884b51e6044 Mon Sep 17 00:00:00 2001 From: Zhan Su Date: Fri, 13 Sep 2019 11:13:37 -0700 Subject: [PATCH 1/2] Make serviceName check null-safe Span object stores `localEndpoint.serviceName` empty string as null so `.isEmpty()` throws NullPointerException. --- .../zipkin2/translation/stackdriver/AttributesExtractor.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/translation-stackdriver/src/main/java/zipkin2/translation/stackdriver/AttributesExtractor.java b/translation-stackdriver/src/main/java/zipkin2/translation/stackdriver/AttributesExtractor.java index e7a795b9..5edbbd0d 100644 --- a/translation-stackdriver/src/main/java/zipkin2/translation/stackdriver/AttributesExtractor.java +++ b/translation-stackdriver/src/main/java/zipkin2/translation/stackdriver/AttributesExtractor.java @@ -80,7 +80,9 @@ Attributes extract(Span zipkinSpan) { } } - if (zipkinSpan.localEndpoint() != null && !zipkinSpan.localEndpoint().serviceName().isEmpty()) { + if (zipkinSpan.localEndpoint() != null && + zipkinSpan.localEndpoint().serviceName() != null && + !zipkinSpan.localEndpoint().serviceName().isEmpty()) { attributes.putAttributeMap( kComponentLabelKey, toAttributeValue(zipkinSpan.localEndpoint().serviceName())); } From 844e24553ac8b769f8431ca4de7803383964199e Mon Sep 17 00:00:00 2001 From: Zhan Su Date: Fri, 13 Sep 2019 11:54:01 -0700 Subject: [PATCH 2/2] Unit test for null endpoint serviceName --- .../stackdriver/AttributesExtractorTest.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/translation-stackdriver/src/test/java/zipkin2/translation/stackdriver/AttributesExtractorTest.java b/translation-stackdriver/src/test/java/zipkin2/translation/stackdriver/AttributesExtractorTest.java index 66aa9fa7..49844c3b 100644 --- a/translation-stackdriver/src/test/java/zipkin2/translation/stackdriver/AttributesExtractorTest.java +++ b/translation-stackdriver/src/test/java/zipkin2/translation/stackdriver/AttributesExtractorTest.java @@ -148,6 +148,24 @@ public void testEndpointIsSetIpv6() { assertThat(clientLabels).doesNotContainKeys("endpoint.ipv4", "endpoint.ipv6"); } + @Test + public void testEndpointWithNullServiceName() { + Endpoint.Builder serverEndpointBuilder = Endpoint.newBuilder().port(80); + Endpoint serverEndpoint = serverEndpointBuilder.build(); + Span serverSpan = + Span.newBuilder() + .kind(Kind.SERVER) + .traceId("4") + .name("test-span") + .id("5") + .localEndpoint(serverEndpoint) + .build(); + + AttributesExtractor extractor = new AttributesExtractor(Collections.emptyMap()); + Map serverLabels = extractor.extract(serverSpan).getAttributeMapMap(); + assertThat(serverLabels).doesNotContainKey("endpoint.serviceName"); + } + @Test public void testComponentLabelIsSet() { AttributesExtractor extractor = new AttributesExtractor(Collections.emptyMap());