55
66package io .opentelemetry .instrumentation .spring .autoconfigure ;
77
8+ import com .fasterxml .jackson .annotation .JsonSetter ;
9+ import com .fasterxml .jackson .annotation .Nulls ;
810import com .fasterxml .jackson .databind .ObjectMapper ;
9- import io .opentelemetry .api .incubator .config .DeclarativeConfigException ;
10- import io .opentelemetry .sdk .extension .incubator .fileconfig .DeclarativeConfiguration ;
1111import io .opentelemetry .sdk .extension .incubator .fileconfig .internal .model .OpenTelemetryConfigurationModel ;
12- import java .lang .reflect .Field ;
1312import java .util .ArrayList ;
1413import java .util .HashMap ;
1514import java .util .Map ;
@@ -25,6 +24,24 @@ class EmbeddedConfigFile {
2524
2625 private static final Pattern ARRAY_PATTERN = Pattern .compile ("(.+)\\ [(\\ d+)]$" );
2726
27+ // the entire configuration is copied from
28+ // https://github.com/open-telemetry/opentelemetry-java/blob/main/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java#L66-L79
29+ // which is not public
30+ private static final ObjectMapper MAPPER ;
31+
32+ static {
33+ MAPPER =
34+ new ObjectMapper ()
35+ // Create empty object instances for keys which are present but have null values
36+ .setDefaultSetterInfo (JsonSetter .Value .forValueNulls (Nulls .AS_EMPTY ));
37+ // Boxed primitives which are present but have null values should be set to null, rather than
38+ // empty instances
39+ MAPPER .configOverride (String .class ).setSetterInfo (JsonSetter .Value .forValueNulls (Nulls .SET ));
40+ MAPPER .configOverride (Integer .class ).setSetterInfo (JsonSetter .Value .forValueNulls (Nulls .SET ));
41+ MAPPER .configOverride (Double .class ).setSetterInfo (JsonSetter .Value .forValueNulls (Nulls .SET ));
42+ MAPPER .configOverride (Boolean .class ).setSetterInfo (JsonSetter .Value .forValueNulls (Nulls .SET ));
43+ }
44+
2845 private EmbeddedConfigFile () {}
2946
3047 static OpenTelemetryConfigurationModel extractModel (ConfigurableEnvironment environment ) {
@@ -67,13 +84,7 @@ static OpenTelemetryConfigurationModel convertToOpenTelemetryConfigurationModel(
6784 }
6885
6986 static ObjectMapper getObjectMapper () {
70- try {
71- Field field = DeclarativeConfiguration .class .getDeclaredField ("MAPPER" );
72- field .setAccessible (true );
73- return (ObjectMapper ) field .get (null );
74- } catch (NoSuchFieldException | IllegalAccessException e ) {
75- throw new DeclarativeConfigException ("Failed to access ObjectMapper" , e );
76- }
87+ return MAPPER ;
7788 }
7889
7990 /**
0 commit comments