diff --git a/api/all/src/main/java/io/opentelemetry/api/baggage/BaggageBuilder.java b/api/all/src/main/java/io/opentelemetry/api/baggage/BaggageBuilder.java index 5cf6c7891b3..612541dea4c 100644 --- a/api/all/src/main/java/io/opentelemetry/api/baggage/BaggageBuilder.java +++ b/api/all/src/main/java/io/opentelemetry/api/baggage/BaggageBuilder.java @@ -15,6 +15,10 @@ public interface BaggageBuilder { /** * Adds the key/value pair and metadata regardless of whether the key is present. * + *

Per the W3C Baggage spec, a + * baggage-name must be a non-empty token. Calls with a {@code null} or empty {@code key}, a + * {@code null} {@code value}, or a {@code null} {@code entryMetadata} are silently ignored. + * * @param key the {@code String} key which will be set. * @param value the {@code String} value to set for the given key. * @param entryMetadata the {@code BaggageEntryMetadata} metadata to set for the given key. diff --git a/api/all/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java b/api/all/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java index d628e89b282..dcefe2a310c 100644 --- a/api/all/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java +++ b/api/all/src/main/java/io/opentelemetry/api/baggage/ImmutableBaggage.java @@ -69,7 +69,7 @@ static class Builder implements BaggageBuilder { @Override public BaggageBuilder put(String key, String value, BaggageEntryMetadata entryMetadata) { - if ((key == null) || (value == null) || (entryMetadata == null)) { + if ((key == null) || key.isEmpty() || (value == null) || (entryMetadata == null)) { return this; } data.add(key); diff --git a/api/all/src/test/java/io/opentelemetry/api/baggage/ImmutableBaggageTest.java b/api/all/src/test/java/io/opentelemetry/api/baggage/ImmutableBaggageTest.java index a10d2ca1902..041744f9850 100644 --- a/api/all/src/test/java/io/opentelemetry/api/baggage/ImmutableBaggageTest.java +++ b/api/all/src/test/java/io/opentelemetry/api/baggage/ImmutableBaggageTest.java @@ -114,8 +114,17 @@ void put_keyUnprintableChars() { @Test void put_keyEmpty() { BaggageBuilder builder = ONE_ENTRY.toBuilder(); + Baggage built = builder.build(); builder.put("", "value"); - assertThat(builder.build().getEntryValue("")).isEqualTo("value"); + assertThat(builder.build()).isEqualTo(built); + } + + @Test + void put_keyEmpty_withMetadata() { + BaggageBuilder builder = ONE_ENTRY.toBuilder(); + Baggage built = builder.build(); + builder.put("", "value", TMD); + assertThat(builder.build()).isEqualTo(built); } @Test