diff --git a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java index 6e67bd0bdb4..4e6fa303825 100644 --- a/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java +++ b/sdk-extensions/incubator/src/main/java/io/opentelemetry/sdk/extension/incubator/fileconfig/DeclarativeConfiguration.java @@ -53,6 +53,31 @@ * YAML * configuration file. + * + *
External consumers needing to parse OpenTelemetry YAML configuration files should use the same + * Jackson ObjectMapper configuration for compatibility. This configuration is intentionally not + * exposed as API to avoid coupling. Instead, copy the following setup: + * + *
{@code
+ * ObjectMapper mapper = new ObjectMapper()
+ * // Create empty object instances for keys which are present but have null values
+ * .setDefaultSetterInfo(JsonSetter.Value.forValueNulls(Nulls.AS_EMPTY));
+ * // Boxed primitives which are present but have null values should be set to null,
+ * // rather than empty instances
+ * mapper.configOverride(String.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.SET));
+ * mapper.configOverride(Integer.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.SET));
+ * mapper.configOverride(Double.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.SET));
+ * mapper.configOverride(Boolean.class).setSetterInfo(JsonSetter.Value.forValueNulls(Nulls.SET));
+ * }
+ *
+ * Why this configuration: + * + *
Configuration: + * + *
External consumers needing compatible parsing should copy this configuration. See class + * javadoc for details and code example. + */ // Visible for testing static final ObjectMapper MAPPER;