11package software .amazon .awssdk .enhanced .dynamodb .internal .document ;
22
3- import java .io .IOException ;
4- import java .io .StringWriter ;
3+ import java .nio .charset .StandardCharsets ;
54import java .util .Map ;
65import software .amazon .awssdk .annotations .SdkInternalApi ;
76import software .amazon .awssdk .core .SdkBytes ;
7+ import software .amazon .awssdk .protocols .json .SdkJsonGenerator ;
88import software .amazon .awssdk .services .dynamodb .model .AttributeValue ;
99import software .amazon .awssdk .thirdparty .jackson .core .JsonFactory ;
10- import software .amazon .awssdk .thirdparty .jackson .core .JsonGenerator ;
1110
1211@ SdkInternalApi
1312public 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