66import com .fasterxml .jackson .core .JsonParser ;
77import com .fasterxml .jackson .databind .DeserializationContext ;
88import com .fasterxml .jackson .databind .JsonDeserializer ;
9- import com .fasterxml .jackson .databind .JsonNode ;
109import com .fasterxml .jackson .databind .JsonSerializer ;
11- import com .fasterxml .jackson .databind .ObjectMapper ;
1210import com .fasterxml .jackson .databind .SerializerProvider ;
1311import com .fasterxml .jackson .databind .module .SimpleModule ;
1412import java .io .IOException ;
@@ -28,42 +26,38 @@ public class AwsSdkV2Module extends SimpleModule {
2826 */
2927 private static final List <Class <?>> SDK_CLASSES = List .of (Operation .class , ErrorObject .class );
3028
31- public AwsSdkV2Module (ObjectMapper sharedMapper ) {
29+ public AwsSdkV2Module () {
3230 super ("AwsSdkV2Module" );
3331
3432 // Register serializers and deserializers for all SDK classes
3533 for (Class <?> sdkClass : SDK_CLASSES ) {
36- registerSdkClass (sdkClass , sharedMapper );
34+ registerSdkClass (sdkClass );
3735 }
3836 }
3937
40- private <T > void registerSdkClass (Class <T > sdkClass , ObjectMapper sharedMapper ) {
41- addDeserializer (sdkClass , new SdkDeserializer <>(sdkClass , sharedMapper ));
38+ private <T > void registerSdkClass (Class <T > sdkClass ) {
39+ addDeserializer (sdkClass , new SdkDeserializer <>(sdkClass ));
4240 addSerializer (sdkClass , new SdkSerializer <>());
4341 }
4442
4543 private static class SdkDeserializer <T > extends JsonDeserializer <T > {
4644 private final Class <T > sdkClass ;
47- private final ObjectMapper mapper ;
4845
49- SdkDeserializer (Class <T > sdkClass , ObjectMapper mapper ) {
46+ SdkDeserializer (Class <T > sdkClass ) {
5047 this .sdkClass = sdkClass ;
51- this .mapper = mapper ;
5248 }
5349
5450 @ Override
5551 @ SuppressWarnings ("unchecked" )
5652 public T deserialize (JsonParser p , DeserializationContext ctxt ) throws IOException {
57- JsonNode node = p .readValueAsTree ();
58-
5953 try {
6054 // Call serializableBuilderClass() method on the SDK class
6155 Method serializableBuilderClassMethod = sdkClass .getMethod ("serializableBuilderClass" );
6256 serializableBuilderClassMethod .setAccessible (true );
6357 Class <?> builderClass = (Class <?>) serializableBuilderClassMethod .invoke (null );
6458
65- // Deserialize to builder and build the final object
66- Object builder = mapper . readValue ( node . toString (), builderClass );
59+ // Deserialize to builder using treeToValue (avoids double parsing via toString())
60+ Object builder = p . readValueAs ( builderClass );
6761 Method buildMethod = builderClass .getMethod ("build" );
6862 buildMethod .setAccessible (true );
6963 return (T ) buildMethod .invoke (builder );
0 commit comments