Skip to content

Commit 15a25be

Browse files
committed
use SdkJsonGenerator
1 parent 241d120 commit 15a25be

File tree

1 file changed

+29
-35
lines changed

1 file changed

+29
-35
lines changed

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

Lines changed: 29 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,50 @@
11
package software.amazon.awssdk.enhanced.dynamodb.internal.document;
22

3-
import java.io.IOException;
4-
import java.io.StringWriter;
3+
import java.nio.charset.StandardCharsets;
54
import java.util.Map;
65
import software.amazon.awssdk.annotations.SdkInternalApi;
76
import software.amazon.awssdk.core.SdkBytes;
7+
import software.amazon.awssdk.protocols.json.SdkJsonGenerator;
88
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
99
import software.amazon.awssdk.thirdparty.jackson.core.JsonFactory;
10-
import software.amazon.awssdk.thirdparty.jackson.core.JsonGenerator;
1110

1211
@SdkInternalApi
1312
public final class StrategyJsonSerializer {
1413

15-
private StrategyJsonSerializer() {
16-
}
17-
1814
private enum JsonSerializationStrategy {
1915
NULL {
2016
@Override
21-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
17+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
2218
generator.writeNull();
2319
}
2420
},
2521
STRING {
2622
@Override
27-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
28-
generator.writeString(av.s());
23+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
24+
generator.writeValue(av.s());
2925
}
3026
},
3127
NUMBER {
3228
@Override
33-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
29+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
3430
generator.writeNumber(av.n());
3531
}
3632
},
3733
BOOLEAN {
3834
@Override
39-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
40-
generator.writeBoolean(av.bool());
35+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
36+
generator.writeValue(av.bool());
4137
}
4238
},
4339
BYTES {
4440
@Override
45-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
46-
generator.writeBinary(av.b().asByteArray());
41+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
42+
generator.writeValue(av.b().asByteBuffer());
4743
}
4844
},
4945
LIST {
5046
@Override
51-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
47+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
5248
generator.writeStartArray();
5349
for (AttributeValue item : av.l()) {
5450
serializeAttributeValue(generator, item);
@@ -58,7 +54,7 @@ public void serialize(JsonGenerator generator, AttributeValue av) throws IOExcep
5854
},
5955
MAP {
6056
@Override
61-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
57+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
6258
generator.writeStartObject();
6359
for (Map.Entry<String, AttributeValue> entry : av.m().entrySet()) {
6460
generator.writeFieldName(entry.getKey());
@@ -69,17 +65,17 @@ public void serialize(JsonGenerator generator, AttributeValue av) throws IOExcep
6965
},
7066
STRING_SET {
7167
@Override
72-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
68+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
7369
generator.writeStartArray();
7470
for (String s : av.ss()) {
75-
generator.writeString(s);
71+
generator.writeValue(s);
7672
}
7773
generator.writeEndArray();
7874
}
7975
},
8076
NUMBER_SET {
8177
@Override
82-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
78+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
8379
generator.writeStartArray();
8480
for (String n : av.ns()) {
8581
generator.writeNumber(n);
@@ -89,34 +85,32 @@ public void serialize(JsonGenerator generator, AttributeValue av) throws IOExcep
8985
},
9086
BYTES_SET {
9187
@Override
92-
public void serialize(JsonGenerator generator, AttributeValue av) throws IOException {
88+
public void serialize(SdkJsonGenerator generator, AttributeValue av) {
9389
generator.writeStartArray();
9490
for (SdkBytes b : av.bs()) {
95-
generator.writeBinary(b.asByteArray());
91+
generator.writeValue(b.asByteBuffer());
9692
}
9793
generator.writeEndArray();
9894
}
9995
};
10096

101-
public abstract void serialize(JsonGenerator generator, AttributeValue av) throws IOException;
97+
public abstract void serialize(SdkJsonGenerator generator, AttributeValue av);
10298
}
10399

104100
public static String serializeAttributeValueMap(Map<String, AttributeValue> map) {
105-
StringWriter writer = new StringWriter();
106-
try (JsonGenerator generator = new JsonFactory().createGenerator(writer)) {
107-
generator.writeStartObject();
108-
for (Map.Entry<String, AttributeValue> entry : map.entrySet()) {
109-
generator.writeFieldName(entry.getKey());
110-
serializeAttributeValue(generator, entry.getValue());
111-
}
112-
generator.writeEndObject();
113-
} catch (IOException e) {
114-
throw new IllegalStateException("Failed to serialize AttributeValue map to JSON", e);
115-
}
116-
return writer.toString();
101+
SdkJsonGenerator jsonGen = new SdkJsonGenerator(new JsonFactory(), "application/json");
102+
103+
jsonGen.writeStartObject();
104+
map.forEach((key, value) -> {
105+
jsonGen.writeFieldName(key);
106+
serializeAttributeValue(jsonGen, value);
107+
});
108+
jsonGen.writeEndObject();
109+
110+
return new String(jsonGen.getBytes(), StandardCharsets.UTF_8);
117111
}
118112

119-
private static void serializeAttributeValue(JsonGenerator generator, AttributeValue av) throws IOException {
113+
public static void serializeAttributeValue(SdkJsonGenerator generator, AttributeValue av) {
120114
JsonSerializationStrategy strategy = getStrategy(av);
121115
strategy.serialize(generator, av);
122116
}

0 commit comments

Comments
 (0)