From f235a518684d4e5f89bb3793c42330d1b1e20e17 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Fri, 13 Feb 2026 11:25:29 -0800 Subject: [PATCH 1/3] Add test showcasing the issue --- .../attribute/StringAttributeConvertersTest.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java index 8f1fdef012ca..7fb7e4a16b4d 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java @@ -16,6 +16,7 @@ package software.amazon.awssdk.enhanced.dynamodb.converters.attribute; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.InstanceOfAssertFactories.BOOLEAN; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.assertFails; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformFrom; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformTo; @@ -56,6 +57,7 @@ import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.UuidAttributeConverter; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ZoneIdAttributeConverter; import software.amazon.awssdk.enhanced.dynamodb.internal.converter.attribute.ZoneOffsetAttributeConverter; +import software.amazon.awssdk.services.dynamodb.model.AttributeValue; import software.amazon.awssdk.utils.ImmutableMap; public class StringAttributeConvertersTest { @@ -254,4 +256,14 @@ public void stringSetAttributeConverter_ReturnsSSType() { SetAttributeConverter> converter = SetAttributeConverter.setConverter(StringAttributeConverter.create()); assertThat(converter.attributeValueType()).isEqualTo(AttributeValueType.SS); } + + @Test + public void stringAttributeConverter_convertsMapWithNullValue() { + StringAttributeConverter converter = StringAttributeConverter.create(); + + assertThat(transformTo(converter, fromMap(ImmutableMap.of( + "stringField", AttributeValue.builder().s("value").build(), + "nullField", AttributeValue.builder().nul(true).build())))) + .isEqualTo("{stringField=value, nullField=null}"); + } } From 50d95834c628a52e8ab1134ebca3772672805065 Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:02:58 -0800 Subject: [PATCH 2/3] Add null handling in convertMap --- .../converter/attribute/StringAttributeConverter.java | 10 ++++++++-- .../attribute/StringAttributeConvertersTest.java | 10 ++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java index bf558d03dbbd..4d8da920d6a9 100644 --- a/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java +++ b/services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/converter/attribute/StringAttributeConverter.java @@ -125,8 +125,14 @@ public String convertMap(Map value) { }; return value.entrySet().stream() - .collect(Collectors.toMap(Map.Entry::getKey, i -> toString(i.getValue()), - throwingMerger, LinkedHashMap::new)) + .collect(Collectors.toMap( + Map.Entry::getKey, + i -> { + String converted = toString(i.getValue()); + return converted == null ? "null" : converted; + }, + throwingMerger, + LinkedHashMap::new)) .toString(); } diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java index 7fb7e4a16b4d..9700cc8575e1 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java @@ -260,10 +260,12 @@ public void stringSetAttributeConverter_ReturnsSSType() { @Test public void stringAttributeConverter_convertsMapWithNullValue() { StringAttributeConverter converter = StringAttributeConverter.create(); - - assertThat(transformTo(converter, fromMap(ImmutableMap.of( + + String result = transformTo(converter, fromMap(ImmutableMap.of( "stringField", AttributeValue.builder().s("value").build(), - "nullField", AttributeValue.builder().nul(true).build())))) - .isEqualTo("{stringField=value, nullField=null}"); + "nullField", AttributeValue.builder().nul(true).build()))); + + assertThat(result).contains("stringField=value"); + assertThat(result).contains("nullField=null"); } } From a9b370da6c90bce54a70d603a1b068e7906b23ec Mon Sep 17 00:00:00 2001 From: RanVaknin <50976344+RanVaknin@users.noreply.github.com> Date: Fri, 13 Feb 2026 13:18:44 -0800 Subject: [PATCH 3/3] Remove unused import --- .../converters/attribute/StringAttributeConvertersTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java index 9700cc8575e1..8d10cba3fc80 100644 --- a/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java +++ b/services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/converters/attribute/StringAttributeConvertersTest.java @@ -16,7 +16,6 @@ package software.amazon.awssdk.enhanced.dynamodb.converters.attribute; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.InstanceOfAssertFactories.BOOLEAN; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.assertFails; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformFrom; import static software.amazon.awssdk.enhanced.dynamodb.converters.attribute.ConverterTestUtils.transformTo;