Skip to content

Commit 9e4923b

Browse files
committed
Streamline AwsSdkV2Module object mapper into a single build call.
1 parent d607b9a commit 9e4923b

2 files changed

Lines changed: 9 additions & 18 deletions

File tree

sdk/src/main/java/com/amazonaws/lambda/durable/DurableHandler.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ public Instant deserialize(JsonParser jsonParser, DeserializationContext deseria
212212
}
213213
});
214214

215-
var baseMapper = JsonMapper.builder()
215+
return JsonMapper.builder()
216216
.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
217217
.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
218218
// Looks pretty, and probably needed for tests to be deterministic.
@@ -222,10 +222,7 @@ public Instant deserialize(JsonParser jsonParser, DeserializationContext deseria
222222
.propertyNamingStrategy(PropertyNamingStrategies.UPPER_CAMEL_CASE)
223223
.addModule(new JavaTimeModule())
224224
.addModule(dateModule)
225+
.addModule(new AwsSdkV2Module())
225226
.build();
226-
227-
baseMapper.registerModule(new AwsSdkV2Module(baseMapper));
228-
229-
return baseMapper;
230227
}
231228
}

sdk/src/main/java/com/amazonaws/lambda/durable/serde/AwsSdkV2Module.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,7 @@
66
import com.fasterxml.jackson.core.JsonParser;
77
import com.fasterxml.jackson.databind.DeserializationContext;
88
import com.fasterxml.jackson.databind.JsonDeserializer;
9-
import com.fasterxml.jackson.databind.JsonNode;
109
import com.fasterxml.jackson.databind.JsonSerializer;
11-
import com.fasterxml.jackson.databind.ObjectMapper;
1210
import com.fasterxml.jackson.databind.SerializerProvider;
1311
import com.fasterxml.jackson.databind.module.SimpleModule;
1412
import 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

Comments
 (0)