Skip to content

Commit 50f81fb

Browse files
authored
Fix for Issue [#4156](#4156) : Single quotes in toJson conversions for EnhancedDocuments are no longer being escaped. (#4277)
1 parent be936c8 commit 50f81fb

File tree

3 files changed

+32
-4
lines changed

3 files changed

+32
-4
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "AWS DynamoDB Enhanced Client",
4+
"contributor": "",
5+
"description": "Fix for Issue [#4156](https://github.com/aws/aws-sdk-java-v2/issues/4156) : Single quotes in toJson conversions for EnhancedDocuments are no longer being escaped."
6+
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/document/JsonStringFormatHelper.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -74,9 +74,6 @@ public static String addEscapeCharacters(String input) {
7474
case '\"':
7575
output.append("\\\""); // double-quote character
7676
break;
77-
case '\'':
78-
output.append("\\'"); // single-quote character
79-
break;
8077
default:
8178
output.append(ch);
8279
break;

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/document/EnhancedDocumentTest.java

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import static org.assertj.core.api.Assertions.assertThat;
2424
import static software.amazon.awssdk.enhanced.dynamodb.document.EnhancedDocumentTestData.testDataInstance;
2525

26+
import com.fasterxml.jackson.core.JsonProcessingException;
27+
import com.fasterxml.jackson.databind.ObjectMapper;
2628
import java.math.BigDecimal;
2729
import java.time.LocalDate;
2830
import java.util.ArrayList;
@@ -55,6 +57,8 @@ private static Stream<Arguments> escapeDocumentStrings() {
5557
return Stream.of(
5658
Arguments.of(String.valueOf(c), "{\"key\":\"\\n\"}")
5759
, Arguments.of("", "{\"key\":\"\"}")
60+
, Arguments.of("\"", "{\"key\":\"\\\"\"}")
61+
, Arguments.of("\\", "{\"key\":\"\\\\\"}")
5862
, Arguments.of(" ", "{\"key\":\" \"}")
5963
, Arguments.of("\t", "{\"key\":\"\\t\"}")
6064
, Arguments.of("\n", "{\"key\":\"\\n\"}")
@@ -63,6 +67,13 @@ private static Stream<Arguments> escapeDocumentStrings() {
6367
);
6468
}
6569

70+
private static Stream<Arguments> unEscapeDocumentStrings() {
71+
return Stream.of(
72+
Arguments.of("'", "{\"key\":\"'\"}"),
73+
Arguments.of("'single quote'", "{\"key\":\"'single quote'\"}")
74+
);
75+
}
76+
6677
@Test
6778
void enhancedDocumentGetters() {
6879

@@ -337,13 +348,27 @@ void invalidKeyNames(String escapingString) {
337348

338349
@ParameterizedTest
339350
@MethodSource("escapeDocumentStrings")
340-
void escapingTheValues(String escapingString, String expectedJson) {
351+
void escapingTheValues(String escapingString, String expectedJson) throws JsonProcessingException {
352+
353+
EnhancedDocument document = EnhancedDocument.builder()
354+
.attributeConverterProviders(defaultProvider())
355+
.putString("key", escapingString)
356+
.build();
357+
assertThat(document.toJson()).isEqualTo(expectedJson);
358+
assertThat(new ObjectMapper().readTree(document.toJson())).isNotNull();
359+
}
360+
361+
@ParameterizedTest
362+
@MethodSource("unEscapeDocumentStrings")
363+
void unEscapingTheValues(String escapingString, String expectedJson) throws JsonProcessingException {
341364

342365
EnhancedDocument document = EnhancedDocument.builder()
343366
.attributeConverterProviders(defaultProvider())
344367
.putString("key", escapingString)
345368
.build();
346369
assertThat(document.toJson()).isEqualTo(expectedJson);
370+
assertThat(new ObjectMapper().readTree(document.toJson())).isNotNull();
371+
347372
}
348373

349374
@Test

0 commit comments

Comments
 (0)