diff --git a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java index e017cb878..631751349 100644 --- a/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java +++ b/disk-buffering/src/main/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapper.java @@ -85,7 +85,13 @@ private static void addValue(AttributesBuilder builder, String key, AnyValue val } else if (value.array_value != null) { addArray(builder, key, value.array_value); } else { - throw new UnsupportedOperationException(); + // Until we have complex attribute types that could potentially yield + // empty objects, we MUST assume here that the writer put an empty string + // into the value of the attribute. This will need to change later, when complex + // types arrive and the spec issue is resolved. + // + // See spec issue: https://github.com/open-telemetry/opentelemetry-specification/issues/4660 + builder.put(AttributeKey.stringKey(key), ""); } } diff --git a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java index ceb758642..a5db9382f 100644 --- a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java +++ b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/internal/serialization/mapping/common/AttributesMapperTest.java @@ -21,6 +21,7 @@ void verifyMapping() { Attributes attributes = Attributes.builder() .put(AttributeKey.stringKey("someString"), "someValue") + .put(AttributeKey.stringKey("emptyString"), "") .put(AttributeKey.booleanKey("someBool"), true) .put(AttributeKey.longKey("someLong"), 10L) .put(AttributeKey.doubleKey("someDouble"), 10.0) diff --git a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java index ec69e8024..0da28971c 100644 --- a/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java +++ b/disk-buffering/src/test/java/io/opentelemetry/contrib/disk/buffering/testutils/TestData.java @@ -37,6 +37,8 @@ public final class TestData { .put("conditions", false, true) .put("scores", 0L, 1L) .put("coins", 0.01, 0.05, 0.1) + .put("empty", "") + .put("blank", " ") .build(); public static final Resource RESOURCE_FULL =