diff --git a/.github/workflows/aws-lambda-java-serialization.yml b/.github/workflows/aws-lambda-java-serialization.yml
index ccc805be..f52c96fe 100644
--- a/.github/workflows/aws-lambda-java-serialization.yml
+++ b/.github/workflows/aws-lambda-java-serialization.yml
@@ -40,7 +40,7 @@ jobs:
# Package and install target module
- name: Package serialization with Maven
- run: mvn -B package install --file aws-lambda-java-serialization/pom.xml
+ run: mvn -B install --file aws-lambda-java-serialization/pom.xml
# Run tests
- name: Run tests from aws-lambda-java-tests
diff --git a/aws-lambda-java-serialization/RELEASE.CHANGELOG.md b/aws-lambda-java-serialization/RELEASE.CHANGELOG.md
index 4a0e8ca2..d68d7b1f 100644
--- a/aws-lambda-java-serialization/RELEASE.CHANGELOG.md
+++ b/aws-lambda-java-serialization/RELEASE.CHANGELOG.md
@@ -1,7 +1,14 @@
+### March 26, 2026
+`1.4.0`:
+- Update `jackson-databind` dependency from 2.15.4 to 2.18.6
+- Replace deprecated `PropertyNamingStrategy.PascalCaseStrategy` with `PropertyNamingStrategies.UpperCamelCaseStrategy`
+- The regression reported in 1.3.1 was a false positive caused by a CI workflow bug (`mvn package install` running the shade plugin twice, corrupting the artifact). Fixed by using `mvn install` instead.
+
### March 19, 2026
`1.3.1`:
- Revert `jackson-databind` dependency from 2.18.6 to 2.15.4
- Revert `PropertyNamingStrategies.UpperCamelCaseStrategy` to `PropertyNamingStrategy.PascalCaseStrategy`
+- Note: reverted due to a suspected regression in Joda DateTime deserialization; later confirmed to be a false positive (see 1.4.0)
### March 11, 2026
`1.3.0`:
diff --git a/aws-lambda-java-serialization/pom.xml b/aws-lambda-java-serialization/pom.xml
index a71eb1f8..d412fd76 100644
--- a/aws-lambda-java-serialization/pom.xml
+++ b/aws-lambda-java-serialization/pom.xml
@@ -4,7 +4,7 @@
com.amazonaws
aws-lambda-java-serialization
- 1.3.1
+ 1.4.0
jar
AWS Lambda Java Runtime Serialization
@@ -32,7 +32,7 @@
1.8
1.8
com.amazonaws.lambda.thirdparty
- 2.15.4
+ 2.18.6
2.10.1
20231013
7.3.2
diff --git a/aws-lambda-java-serialization/src/main/java/com/amazonaws/services/lambda/runtime/serialization/events/LambdaEventSerializers.java b/aws-lambda-java-serialization/src/main/java/com/amazonaws/services/lambda/runtime/serialization/events/LambdaEventSerializers.java
index 3f01d99b..533bdcd4 100644
--- a/aws-lambda-java-serialization/src/main/java/com/amazonaws/services/lambda/runtime/serialization/events/LambdaEventSerializers.java
+++ b/aws-lambda-java-serialization/src/main/java/com/amazonaws/services/lambda/runtime/serialization/events/LambdaEventSerializers.java
@@ -19,6 +19,7 @@
import com.amazonaws.services.lambda.runtime.serialization.PojoSerializer;
import com.amazonaws.services.lambda.runtime.serialization.util.ReflectUtil;
import com.amazonaws.services.lambda.runtime.serialization.util.SerializeUtil;
+import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.PropertyNamingStrategy;
import com.amazonaws.services.lambda.runtime.serialization.events.modules.DateModule;
import com.amazonaws.services.lambda.runtime.serialization.events.modules.DateTimeModule;
@@ -86,156 +87,146 @@ public class LambdaEventSerializers {
"com.amazonaws.services.lambda.runtime.events.SQSEvent")
.collect(Collectors.toList());
- /**
- * list of events incompatible with Jackson, with serializers explicitly defined
- * Classes are incompatible with Jackson for any of the following reasons:
- * 1. different constructor/setter types from getter types
- * 2. various bugs within Jackson
- */
- private static final Map SERIALIZER_MAP = Stream.of(
- new SimpleEntry<>("com.amazonaws.services.s3.event.S3EventNotification",
- new S3EventSerializer<>()),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification",
- new S3EventSerializer<>()),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.S3Event",
- new S3EventSerializer<>()))
- .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
+ /**
+ * list of events incompatible with Jackson, with serializers explicitly defined
+ * Classes are incompatible with Jackson for any of the following reasons:
+ * 1. different constructor/setter types from getter types
+ * 2. various bugs within Jackson
+ */
+ private static final Map SERIALIZER_MAP = Stream.of(
+ new SimpleEntry<>("com.amazonaws.services.s3.event.S3EventNotification", new S3EventSerializer<>()),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.s3.S3EventNotification", new S3EventSerializer<>()),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.S3Event", new S3EventSerializer<>()))
+ .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));
- /**
- * Maps supported event classes to mixin classes with Jackson annotations.
- * Jackson annotations are not loaded through the ClassLoader so if a Java field
- * is serialized or deserialized from a
- * json field that does not match the Jave field name, then a Mixin is required.
- */
- @SuppressWarnings("rawtypes")
- private static final Map MIXIN_MAP = Stream.of(
- new SimpleEntry<>(
- "com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent",
- CloudFormationCustomResourceEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CloudFrontEvent",
- CloudFrontEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent",
- CloudWatchLogsEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent",
- CodeCommitEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent$Record",
- CodeCommitEventMixin.RecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent",
- ConnectEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Details",
- ConnectEventMixin.DetailsMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$ContactData",
- ConnectEventMixin.ContactDataMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$CustomerEndpoint",
- ConnectEventMixin.CustomerEndpointMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue",
- ConnectEventMixin.QueueMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$SystemEndpoint",
- ConnectEventMixin.SystemEndpointMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent",
- DynamodbEventMixin.class),
- new SimpleEntry<>(
- "com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord",
- DynamodbEventMixin.DynamodbStreamRecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.dynamodbv2.model.StreamRecord",
- DynamodbEventMixin.StreamRecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
- DynamodbEventMixin.StreamRecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.dynamodbv2.model.AttributeValue",
- DynamodbEventMixin.AttributeValueMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
- DynamodbEventMixin.AttributeValueMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbTimeWindowEvent",
- DynamodbTimeWindowEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent",
- KinesisEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent$Record",
- KinesisEventMixin.RecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisTimeWindowEvent",
- KinesisTimeWindowEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ScheduledEvent",
- ScheduledEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SecretsManagerRotationEvent",
- SecretsManagerRotationEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
- SNSEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent$SNSRecord",
- SNSEventMixin.SNSRecordMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent",
- SQSEventMixin.class),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent$SQSMessage",
- SQSEventMixin.SQSMessageMixin.class))
- .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
+ /**
+ * Maps supported event classes to mixin classes with Jackson annotations.
+ * Jackson annotations are not loaded through the ClassLoader so if a Java field is serialized or deserialized from a
+ * json field that does not match the Jave field name, then a Mixin is required.
+ */
+ @SuppressWarnings("rawtypes")
+ private static final Map MIXIN_MAP = Stream.of(
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent",
+ CloudFormationCustomResourceEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CloudFrontEvent",
+ CloudFrontEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent",
+ CloudWatchLogsEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent",
+ CodeCommitEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent$Record",
+ CodeCommitEventMixin.RecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent",
+ ConnectEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Details",
+ ConnectEventMixin.DetailsMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$ContactData",
+ ConnectEventMixin.ContactDataMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$CustomerEndpoint",
+ ConnectEventMixin.CustomerEndpointMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue", ConnectEventMixin.QueueMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$SystemEndpoint",
+ ConnectEventMixin.SystemEndpointMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent",
+ DynamodbEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord",
+ DynamodbEventMixin.DynamodbStreamRecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.dynamodbv2.model.StreamRecord",
+ DynamodbEventMixin.StreamRecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
+ DynamodbEventMixin.StreamRecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.dynamodbv2.model.AttributeValue",
+ DynamodbEventMixin.AttributeValueMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
+ DynamodbEventMixin.AttributeValueMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbTimeWindowEvent",
+ DynamodbTimeWindowEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent",
+ KinesisEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent$Record",
+ KinesisEventMixin.RecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisTimeWindowEvent",
+ KinesisTimeWindowEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ScheduledEvent",
+ ScheduledEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SecretsManagerRotationEvent",
+ SecretsManagerRotationEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
+ SNSEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent$SNSRecord",
+ SNSEventMixin.SNSRecordMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent",
+ SQSEventMixin.class),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent$SQSMessage",
+ SQSEventMixin.SQSMessageMixin.class))
+ .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));
- /**
- * If mixins are required for inner classes of an event, then those nested
- * classes must be specified here.
- */
- @SuppressWarnings("rawtypes")
- private static final Map> NESTED_CLASS_MAP = Stream.of(
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent$Record"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CognitoEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.CognitoEvent$DatasetRecord"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Details"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$ContactData"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$CustomerEndpoint"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$SystemEndpoint"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent",
- Arrays.asList(
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
- "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
- "com.amazonaws.services.dynamodbv2.model.StreamRecord"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord"))),
- new SimpleEntry<>(
- "com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord",
- Arrays.asList(
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
- "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
- "com.amazonaws.services.dynamodbv2.model.StreamRecord"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbTimeWindowEvent",
- Arrays.asList(
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
- "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
- new AlternateNestedClass(
- "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
- "com.amazonaws.services.dynamodbv2.model.StreamRecord"),
- new NestedClass("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.KinesisEvent$Record"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.SNSEvent$SNSRecord"))),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent",
- Arrays.asList(
- new NestedClass("com.amazonaws.services.lambda.runtime.events.SQSEvent$SQSMessage"))))
- .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
+ /**
+ * If mixins are required for inner classes of an event, then those nested classes must be specified here.
+ */
+ @SuppressWarnings("rawtypes")
+ private static final Map> NESTED_CLASS_MAP = Stream.of(
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.CodeCommitEvent$Record"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.CognitoEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.CognitoEvent$DatasetRecord"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Details"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$ContactData"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$CustomerEndpoint"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.ConnectEvent$SystemEndpoint"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent",
+ Arrays.asList(
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
+ "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
+ "com.amazonaws.services.dynamodbv2.model.StreamRecord"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord",
+ Arrays.asList(
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
+ "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
+ "com.amazonaws.services.dynamodbv2.model.StreamRecord"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.DynamodbTimeWindowEvent",
+ Arrays.asList(
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.AttributeValue",
+ "com.amazonaws.services.dynamodbv2.model.AttributeValue"),
+ new AlternateNestedClass(
+ "com.amazonaws.services.lambda.runtime.events.models.dynamodb.StreamRecord",
+ "com.amazonaws.services.dynamodbv2.model.StreamRecord"),
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.DynamodbEvent$DynamodbStreamRecord"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.KinesisEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.KinesisEvent$Record"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.SNSEvent$SNSRecord"))),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SQSEvent",
+ Arrays.asList(
+ new NestedClass("com.amazonaws.services.lambda.runtime.events.SQSEvent$SQSMessage"))))
+ .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));
- /**
- * If event requires a naming strategy. For example, when someone names the
- * getter method getSNS and the setter
- * method setSns, for some magical reasons, using both mixins and a naming
- * strategy works
- */
- private static final Map NAMING_STRATEGY_MAP = Stream.of(
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
- new PropertyNamingStrategy.PascalCaseStrategy()),
- new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue",
- new PropertyNamingStrategy.PascalCaseStrategy()))
- .collect(Collectors.toMap(e -> e.getKey(), e -> e.getValue()));
+ /**
+ * If event requires a naming strategy. For example, when someone names the getter method getSNS and the setter
+ * method setSns, for some magical reasons, using both mixins and a naming strategy works
+ */
+ private static final Map NAMING_STRATEGY_MAP = Stream.of(
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.SNSEvent",
+ new PropertyNamingStrategies.UpperCamelCaseStrategy()),
+ new SimpleEntry<>("com.amazonaws.services.lambda.runtime.events.ConnectEvent$Queue",
+ new PropertyNamingStrategies.UpperCamelCaseStrategy())
+ )
+ .collect(Collectors.toMap(SimpleEntry::getKey, SimpleEntry::getValue));
/**
* Returns whether the class name is a Lambda supported event model.
diff --git a/aws-lambda-java-tests/RELEASE.CHANGELOG.md b/aws-lambda-java-tests/RELEASE.CHANGELOG.md
index 76965b8f..0b4bd251 100644
--- a/aws-lambda-java-tests/RELEASE.CHANGELOG.md
+++ b/aws-lambda-java-tests/RELEASE.CHANGELOG.md
@@ -1,3 +1,9 @@
+### March 27, 2026
+`1.1.3`:
+- Add serialization round-trip tests covering 66 event classes
+- Bumped `aws-lambda-java-serialization` to version `1.4.0` (Jackson `2.15.x` → `2.18.6`)
+- Bumped `aws-lambda-java-events` to version `3.16.1`
+
### August 26, 2021
`1.1.1`:
- Bumped `aws-lambda-java-events` to version `3.11.0`
diff --git a/aws-lambda-java-tests/pom.xml b/aws-lambda-java-tests/pom.xml
index 69a112cb..e63e529a 100644
--- a/aws-lambda-java-tests/pom.xml
+++ b/aws-lambda-java-tests/pom.xml
@@ -5,7 +5,7 @@
com.amazonaws
aws-lambda-java-tests
- 1.1.2
+ 1.1.3
jar
AWS Lambda Java Tests
@@ -40,18 +40,22 @@
-->
5.9.2
0.8.7
+ 1.4.0
+ 3.16.1
+ 3.18.0
+ 3.27.7
com.amazonaws
aws-lambda-java-serialization
- 1.2.0
+ ${aws-lambda-java-serialization.version}
com.amazonaws
aws-lambda-java-events
- 3.16.1
+ ${aws-lambda-java-events.version}
org.junit.jupiter
@@ -71,13 +75,13 @@
org.apache.commons
commons-lang3
- 3.18.0
+ ${commons-lang3.version}
org.assertj
assertj-core
- 3.27.7
+ ${assertj-core.version}
test
diff --git a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/LambdaEventAssert.java b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/LambdaEventAssert.java
index e189b5e2..f8d7e106 100644
--- a/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/LambdaEventAssert.java
+++ b/aws-lambda-java-tests/src/main/java/com/amazonaws/services/lambda/runtime/tests/LambdaEventAssert.java
@@ -25,13 +25,8 @@
* {@link AssertionError}.
*
*
- *
- * This class is intentionally package-private to support updates to
- * the aws-lambda-java-events and aws-lambda-java-serialization packages.
- * Consider making it public if there's a real request for it.
- *
*/
-class LambdaEventAssert {
+public class LambdaEventAssert {
private static final ObjectMapper MAPPER = new ObjectMapper();