Skip to content

Commit 8a3889a

Browse files
authored
Merge pull request #6892 from luneo7/ISSUE-6889
Register SpanLinkAdapter and SpanLinkJson for reflection
2 parents 1ff19ea + e61facb commit 8a3889a

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

  • dd-java-agent/agent-bootstrap/src/main/resources/META-INF/native-image/com.datadoghq/dd-java-agent
  • dd-trace-core/src/main/java/datadog/trace/core

dd-java-agent/agent-bootstrap/src/main/resources/META-INF/native-image/com.datadoghq/dd-java-agent/reflect-config.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@
4747
{"name": "fromJson"}
4848
]
4949
},
50+
{
51+
"name" : "datadog.trace.agent.core.DDSpanLink$SpanLinkAdapter",
52+
"methods": [
53+
{"name": "toSpanLinkJson"}
54+
]
55+
},
56+
{
57+
"name" : "datadog.trace.agent.core.DDSpanLink$SpanLinkJson",
58+
"allDeclaredConstructors" : true,
59+
"allPublicConstructors" : true,
60+
"allDeclaredFields" : true,
61+
"allPublicFields" : true
62+
},
5063
{
5164
"name" : "datadog.trace.instrumentation.springweb.HandlerMappingResourceNameFilter",
5265
"methods": [

dd-trace-core/src/main/java/datadog/trace/core/DDSpanLink.java

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ public class DDSpanLink extends SpanLink {
2323
private static final Logger LOGGER = LoggerFactory.getLogger(DDSpanLink.class);
2424
/** The maximum of characters a span tag value can hold. */
2525
private static final int TAG_MAX_LENGTH = 25_000;
26-
/** JSON encoder (lazily initialized) */
27-
private static JsonAdapter<AgentSpanLink> encoder;
2826

2927
protected DDSpanLink(
3028
DDTraceId traceId, long spanId, byte traceFlags, String traceState, Attributes attributes) {
@@ -95,11 +93,20 @@ public static String toTag(List<AgentSpanLink> links) {
9593
}
9694

9795
private static JsonAdapter<AgentSpanLink> getEncoder() {
98-
if (encoder == null) {
96+
return EncoderHolder.ENCODER;
97+
}
98+
99+
/**
100+
* JSON encoder (lazily initialized). This is not folded at native image build time, so it works
101+
* as expected.
102+
*/
103+
private static class EncoderHolder {
104+
static final JsonAdapter<AgentSpanLink> ENCODER = createEncoder();
105+
106+
private static JsonAdapter<AgentSpanLink> createEncoder() {
99107
Moshi moshi = new Moshi.Builder().add(new SpanLinkAdapter()).build();
100-
encoder = moshi.adapter(AgentSpanLink.class);
108+
return moshi.adapter(AgentSpanLink.class);
101109
}
102-
return encoder;
103110
}
104111

105112
private static class SpanLinkAdapter {

0 commit comments

Comments
 (0)