diff --git a/examples/pom.xml b/examples/pom.xml
index cd076d099..2487a4d14 100644
--- a/examples/pom.xml
+++ b/examples/pom.xml
@@ -38,7 +38,8 @@
powertools-examples-idempotency
powertools-examples-parameters/sam
powertools-examples-parameters/sam-graalvm
- powertools-examples-serialization
+ powertools-examples-serialization/sam
+ powertools-examples-serialization/sam-graalvm
powertools-examples-kafka
powertools-examples-batch
powertools-examples-validation
diff --git a/examples/powertools-examples-serialization/sam-graalvm/Dockerfile b/examples/powertools-examples-serialization/sam-graalvm/Dockerfile
new file mode 100644
index 000000000..a690606ad
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/Dockerfile
@@ -0,0 +1,14 @@
+#Use the official AWS SAM base image for Java 21
+FROM public.ecr.aws/sam/build-java21:latest
+
+#Install GraalVM dependencies
+RUN curl -4 -L curl https://download.oracle.com/graalvm/21/latest/graalvm-jdk-21_linux-x64_bin.tar.gz | tar -xvz
+RUN mv graalvm-jdk-21.* /usr/lib/graalvm
+
+#Make native image and mvn available on CLI
+RUN ln -s /usr/lib/graalvm/bin/native-image /usr/bin/native-image
+RUN ln -s /usr/lib/maven/bin/mvn /usr/bin/mvn
+
+#Set GraalVM as default
+ENV JAVA_HOME=/usr/lib/graalvm
+ENV PATH=/usr/lib/graalvm/bin:$PATH
diff --git a/examples/powertools-examples-serialization/sam-graalvm/Makefile b/examples/powertools-examples-serialization/sam-graalvm/Makefile
new file mode 100644
index 000000000..304b66239
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/Makefile
@@ -0,0 +1,13 @@
+build-APIGatewayDeserializationFunction:
+ mvn clean package -P native-image
+ chmod +x target/hello-world
+ cp target/hello-world $(ARTIFACTS_DIR) # (ARTIFACTS_DIR --> https://github.com/aws/aws-lambda-builders/blob/develop/aws_lambda_builders/workflows/custom_make/DESIGN.md#implementation)
+ chmod +x src/main/config/bootstrap
+ cp src/main/config/bootstrap $(ARTIFACTS_DIR)
+
+build-SQSEventDeserializationFunction:
+ mvn clean package -P native-image
+ chmod +x target/hello-world
+ cp target/hello-world $(ARTIFACTS_DIR) # (ARTIFACTS_DIR --> https://github.com/aws/aws-lambda-builders/blob/develop/aws_lambda_builders/workflows/custom_make/DESIGN.md#implementation)
+ chmod +x src/main/config/bootstrap
+ cp src/main/config/bootstrap $(ARTIFACTS_DIR)
diff --git a/examples/powertools-examples-serialization/sam-graalvm/README.md b/examples/powertools-examples-serialization/sam-graalvm/README.md
new file mode 100644
index 000000000..6fd8c70e5
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/README.md
@@ -0,0 +1,111 @@
+# Powertools for AWS Lambda (Java) - Serialization Example
+
+This project contains an example of Lambda function using the serialization utilities module of Powertools for AWS Lambda (Java). For more information on this module, please refer to the [documentation](https://docs.powertools.aws.dev/lambda-java/utilities/serialization/).
+
+The project contains two `RequestHandler`s -
+
+* [APIGatewayRequestDeserializationFunction](src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java) - Uses the serialization library to deserialize an API Gateway request body
+* [SQSEventDeserializationFunction](src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java) - Uses the serialization library to deserialize an SQS message body
+
+In both cases, the output of the serialized message will be printed to the function logs. The message format
+in JSON looks like this:
+
+```json
+{
+ "id":1234,
+ "name":"product",
+ "price":42
+}
+```
+
+## Deploy the sample application
+
+This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting
+started with SAM in [the examples directory](../../README.md)
+
+## Configuration
+
+- Set the environment to use GraalVM
+
+```shell
+export JAVA_HOME=
+```
+
+## Build the sample application
+
+- Build the Docker image that will be used as the environment for SAM build:
+
+```shell
+docker build --platform linux/amd64 . -t powertools-examples-serialization-sam-graalvm
+```
+
+- Build the SAM project using the docker image
+
+```shell
+sam build --use-container --build-image powertools-examples-serialization-sam-graalvm
+```
+
+#### [Optional] Building with -SNAPSHOT versions of PowerTools
+
+- If you are testing the example with a -SNAPSHOT version of PowerTools, the maven build inside the docker image will fail. This is because the -SNAPSHOT version of the PowerTools library that you are working on is still not available in maven central/snapshot repository.
+ To get around this, follow these steps:
+ - Create the native image using the `docker` command below on your development machine. The native image is created in the `target` directory.
+ - `` docker run --platform linux/amd64 -it -v `pwd`:`pwd` -w `pwd` -v ~/.m2:/root/.m2 powertools-examples-serialization-sam-graalvm mvn clean -Pnative-image package -DskipTests ``
+ - Edit the [`Makefile`](Makefile) remove this line
+ - `mvn clean package -P native-image`
+ - Build the SAM project using the docker image
+ - `sam build --use-container --build-image powertools-examples-serialization-sam-graalvm`
+
+
+## Test the application
+
+### 1. API Gateway Endpoint
+
+To test the HTTP endpoint, we can post a product to the test URL:
+
+```bash
+curl -X POST https://gct1q3gaw0.execute-api.eu-west-1.amazonaws.com/Prod/product/ -H "Content-Type: application/json" -d '{"id": 1234, "name": "product", "price": 42}'
+```
+
+The result will indicate that the handler has successfully deserialized the request body:
+
+```
+Received request for productId: 1234
+```
+
+If we look at the logs using `sam logs --tail --stack-name $MY_STACK`, we will see the full deserialized request:
+
+```json
+{
+ ...
+ "level": "INFO",
+ "loggerName": "org.demo.serialization.APIGatewayRequestDeserializationFunction",
+ "message": "product=Product{id=1234, name='product', price=42.0}\n",
+ ...
+}
+```
+
+### 2. SQS Queue
+For the SQS handler, we have to send a request to our queue. We can either construct the Queue URL (see below), or
+find it from the SQS section of the AWS console.
+
+```bash
+ aws sqs send-message --queue-url "https://sqs.[REGION].amazonaws.com/[ACCOUNT-ID]/sqs-event-deserialization-queue" --message-body '{"id": 1234, "name": "product", "price": 123}'
+```
+
+Here we can find the message by filtering through the logs for messages that have come back from our SQS handler:
+
+```bash
+sam logs --tail --stack-name $MY_STACK --filter SQS
+```
+
+```bash
+ {
+ ...
+ "level": "INFO",
+ "loggerName": "org.demo.serialization.SQSEventDeserializationFunction",
+ "message": "products=[Product{id=1234, name='product', price=42.0}]\n",
+ ...
+}
+
+```
diff --git a/examples/powertools-examples-serialization/events/APIGatewayEvent.json b/examples/powertools-examples-serialization/sam-graalvm/events/APIGatewayEvent.json
similarity index 100%
rename from examples/powertools-examples-serialization/events/APIGatewayEvent.json
rename to examples/powertools-examples-serialization/sam-graalvm/events/APIGatewayEvent.json
diff --git a/examples/powertools-examples-serialization/events/SQSEvent.json b/examples/powertools-examples-serialization/sam-graalvm/events/SQSEvent.json
similarity index 100%
rename from examples/powertools-examples-serialization/events/SQSEvent.json
rename to examples/powertools-examples-serialization/sam-graalvm/events/SQSEvent.json
diff --git a/examples/powertools-examples-serialization/sam-graalvm/pom.xml b/examples/powertools-examples-serialization/sam-graalvm/pom.xml
new file mode 100644
index 000000000..99841998f
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/pom.xml
@@ -0,0 +1,89 @@
+
+ 4.0.0
+ software.amazon.lambda.examples
+ 2.1.1
+ powertools-examples-serialization-sam-graalvm
+ jar
+ Powertools for AWS Lambda (Java) - Examples - Serialization GraalVM
+
+
+ 11
+ 11
+
+
+
+
+ software.amazon.lambda
+ powertools-logging-log4j
+ ${project.version}
+
+
+ software.amazon.lambda
+ powertools-serialization
+ ${project.version}
+
+
+ com.amazonaws
+ aws-lambda-java-core
+ 1.2.3
+
+
+ com.amazonaws
+ aws-lambda-java-events
+ 3.16.0
+
+
+ com.amazonaws
+ aws-lambda-java-runtime-interface-client
+ 2.1.1
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-deploy-plugin
+ 3.1.2
+
+ true
+
+
+
+
+
+
+ native-image
+
+
+
+ org.graalvm.buildtools
+ native-maven-plugin
+ 0.10.1
+ true
+
+
+ build-native
+
+ build
+
+ package
+
+
+
+ hello-world
+ com.amazonaws.services.lambda.runtime.api.client.AWSLambda
+
+
+ --enable-url-protocols=http
+ --add-opens java.base/java.util=ALL-UNNAMED
+
+
+
+
+
+
+
+
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/config/bootstrap b/examples/powertools-examples-serialization/sam-graalvm/src/main/config/bootstrap
new file mode 100644
index 000000000..8e7928cd3
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/config/bootstrap
@@ -0,0 +1,4 @@
+#!/bin/bash
+set -e
+
+./hello-world $_HANDLER
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java b/examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java
similarity index 100%
rename from examples/powertools-examples-serialization/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java
rename to examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java
diff --git a/examples/powertools-examples-serialization/src/main/java/org/demo/serialization/Product.java b/examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/Product.java
similarity index 100%
rename from examples/powertools-examples-serialization/src/main/java/org/demo/serialization/Product.java
rename to examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/Product.java
diff --git a/examples/powertools-examples-serialization/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java b/examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java
similarity index 100%
rename from examples/powertools-examples-serialization/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java
rename to examples/powertools-examples-serialization/sam-graalvm/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json
new file mode 100644
index 000000000..2780aca09
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-core/reflect-config.json
@@ -0,0 +1,13 @@
+[
+ {
+ "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime",
+ "methods":[{"name":"","parameterTypes":[] }],
+ "fields":[{"name":"logger"}],
+ "allPublicMethods":true
+ },
+ {
+ "name":"com.amazonaws.services.lambda.runtime.LambdaRuntimeInternal",
+ "methods":[{"name":"","parameterTypes":[] }],
+ "allPublicMethods":true
+ }
+]
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json
new file mode 100644
index 000000000..ddda5d5f1
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-events/reflect-config.json
@@ -0,0 +1,35 @@
+[
+ {
+ "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent",
+ "allDeclaredFields": true,
+ "allDeclaredMethods": true,
+ "allDeclaredConstructors": true
+ },
+ {
+ "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$ProxyRequestContext",
+ "allDeclaredFields": true,
+ "allDeclaredMethods": true,
+ "allDeclaredConstructors": true
+ },
+ {
+ "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent$RequestIdentity",
+ "allDeclaredFields": true,
+ "allDeclaredMethods": true,
+ "allDeclaredConstructors": true
+ },
+ {
+ "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent",
+ "allDeclaredFields": true,
+ "allDeclaredMethods": true,
+ "allDeclaredConstructors": true
+ },
+ {
+ "name": "com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent",
+ "allDeclaredConstructors": true,
+ "allPublicConstructors": true,
+ "allDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ }
+]
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json
new file mode 100644
index 000000000..d30696750
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/jni-config.json
@@ -0,0 +1,11 @@
+[
+ {
+ "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.LambdaRuntimeClientException",
+ "methods":[{"name":"","parameterTypes":["java.lang.String","int"] }]
+ },
+ {
+ "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.InvocationRequest",
+ "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name":"content"}],
+ "allPublicMethods":true
+ }
+]
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties
new file mode 100644
index 000000000..20f8b7801
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/native-image.properties
@@ -0,0 +1 @@
+Args = --initialize-at-build-time=jdk.xml.internal.SecuritySupport
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json
new file mode 100644
index 000000000..8a81b75ac
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/reflect-config.json
@@ -0,0 +1,38 @@
+[
+ {
+ "name":"com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]"
+ },
+ {
+ "name":"com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl",
+ "methods":[{"name":"","parameterTypes":[] }]
+ },
+ {
+ "name":"com.amazonaws.services.lambda.runtime.LambdaRuntime",
+ "fields":[{"name":"logger"}]
+ },
+ {
+ "name":"java.lang.Void",
+ "methods":[{"name":"","parameterTypes":[] }]
+ },
+ {
+ "name":"java.util.Collections$UnmodifiableMap",
+ "fields":[{"name":"m"}]
+ },
+ {
+ "name":"jdk.internal.module.IllegalAccessLogger",
+ "fields":[{"name":"logger"}]
+ },
+ {
+ "name":"sun.misc.Unsafe",
+ "fields":[{"name":"theUnsafe"}]
+ },
+ {
+ "name":"com.amazonaws.services.lambda.runtime.api.client.runtimeapi.InvocationRequest",
+ "fields":[{"name":"id"}, {"name":"invokedFunctionArn"}, {"name":"deadlineTimeInMs"}, {"name":"xrayTraceId"}, {"name":"clientContext"}, {"name":"cognitoIdentity"}, {"name":"content"}],
+ "allPublicMethods":true
+ },
+ {
+ "name":"software.amazon.lambda.powertools.common.internal.LambdaHandlerProcessor",
+ "fields":[{"name":"IS_COLD_START"},{"name":"SERVICE_NAME"}]
+ }
+]
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json
new file mode 100644
index 000000000..7cc78a494
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-runtime-interface-client/resource-config.json
@@ -0,0 +1,19 @@
+{
+ "resources": {
+ "includes": [
+ {
+ "pattern": "\\Qaarch64/aws-lambda-runtime-interface-client.glibc.so\\E"
+ },
+ {
+ "pattern": "\\Qaarch64/aws-lambda-runtime-interface-client.musl.so\\E"
+ },
+ {
+ "pattern": "\\Qx86_64/aws-lambda-runtime-interface-client.glibc.so\\E"
+ },
+ {
+ "pattern": "\\Qx86_64/aws-lambda-runtime-interface-client.musl.so\\E"
+ }
+ ]
+ },
+ "bundles": []
+}
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json
new file mode 100644
index 000000000..9890688f9
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/com.amazonaws/aws-lambda-java-serialization/reflect-config.json
@@ -0,0 +1,25 @@
+[
+ {
+ "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.deser.Deserializers[]"
+ },
+ {
+ "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7HandlersImpl",
+ "methods": [{ "name": "", "parameterTypes": [] }]
+ },
+ {
+ "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ext.Java7SupportImpl",
+ "methods": [{ "name": "", "parameterTypes": [] }]
+ },
+ {
+ "name": "com.amazonaws.lambda.thirdparty.com.fasterxml.jackson.databind.ser.Serializers[]"
+ },
+ {
+ "name": "org.joda.time.DateTime",
+ "allDeclaredConstructors": true,
+ "allPublicConstructors": true,
+ "allDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ }
+]
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/native-image.properties b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/native-image.properties
new file mode 100644
index 000000000..a2249e17d
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/native-image.properties
@@ -0,0 +1,3 @@
+Args = --enable-url-protocols=http,https \
+--initialize-at-run-time=\
+ software.amazon.lambda.powertools.core.internal.LambdaHandlerProcessor
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/reflect-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/reflect-config.json
new file mode 100644
index 000000000..e35ca7c4f
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/reflect-config.json
@@ -0,0 +1,29 @@
+[
+ {
+ "name": "org.demo.serialization.APIGatewayRequestDeserializationFunction",
+ "allDeclaredConstructors": true,
+ "allPublicConstructors": true,
+ "allDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "org.demo.serialization.Product",
+ "allDeclaredConstructors": true,
+ "allPublicConstructors": true,
+ "allDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ },
+ {
+ "name": "org.demo.serialization.SQSEventDeserializationFunction",
+ "allDeclaredConstructors": true,
+ "allPublicConstructors": true,
+ "allDeclaredMethods": true,
+ "allPublicMethods": true,
+ "allDeclaredClasses": true,
+ "allPublicClasses": true
+ }
+]
diff --git a/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/resource-config.json b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/resource-config.json
new file mode 100644
index 000000000..be6aac3f6
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/META-INF/native-image/helloworld/resource-config.json
@@ -0,0 +1,7 @@
+{
+ "resources":{
+ "includes":[{
+ "pattern":"\\Qlog4j2.xml\\E"
+ }]},
+ "bundles":[]
+}
diff --git a/examples/powertools-examples-serialization/src/main/resources/log4j2.xml b/examples/powertools-examples-serialization/sam-graalvm/src/main/resources/log4j2.xml
similarity index 100%
rename from examples/powertools-examples-serialization/src/main/resources/log4j2.xml
rename to examples/powertools-examples-serialization/sam-graalvm/src/main/resources/log4j2.xml
diff --git a/examples/powertools-examples-serialization/sam-graalvm/template.yaml b/examples/powertools-examples-serialization/sam-graalvm/template.yaml
new file mode 100644
index 000000000..39fd22928
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam-graalvm/template.yaml
@@ -0,0 +1,64 @@
+AWSTemplateFormatVersion: '2010-09-09'
+Transform: AWS::Serverless-2016-10-31
+Description: >
+ serialization utils demo
+
+Globals:
+ Function:
+ Timeout: 20
+ MemorySize: 512
+ Tracing: Active
+
+
+Resources:
+ APIGatewayDeserializationFunction:
+ Type: AWS::Serverless::Function
+ Properties:
+ CodeUri: .
+ Handler: org.demo.serialization.APIGatewayRequestDeserializationFunction::handleRequest
+ Runtime: provided.al2023
+ Events:
+ Product:
+ Type: Api
+ Properties:
+ Path: /product
+ Method: post
+
+ DemoSqsQueue:
+ Type: AWS::SQS::Queue
+ Properties:
+ QueueName: "sqs-event-deserialization-queue"
+
+ SQSEventDeserializationFunction:
+ Type: AWS::Serverless::Function
+ Properties:
+ CodeUri: .
+ Handler: org.demo.serialization.SQSEventDeserializationFunction::handleRequest
+ Runtime: provided.al2023
+ Policies:
+ - Statement:
+ - Sid: SQSSendMessageBatch
+ Effect: Allow
+ Action:
+ - sqs:SendMessageBatch
+ - sqs:SendMessage
+ Resource: !GetAtt DemoSqsQueue.Arn
+ Events:
+ SQSEvent:
+ Type: SQS
+ Properties:
+ Queue: !GetAtt DemoSqsQueue.Arn
+ BatchSize: 2
+ MaximumBatchingWindowInSeconds: 30
+
+
+Outputs:
+ Api:
+ Description: "API Gateway endpoint URL for Prod stage for Serialization function"
+ Value: !Sub "https://${ServerlessRestApi}.execute-api.${AWS::Region}.amazonaws.com/Prod/product/"
+ Function:
+ Description: "Serialization Lambda Function ARN"
+ Value: !GetAtt APIGatewayDeserializationFunction.Arn
+ DemoSqsQueue:
+ Description: "ARN for SQS queue"
+ Value: !GetAtt DemoSqsQueue.Arn
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/README.md b/examples/powertools-examples-serialization/sam/README.md
similarity index 97%
rename from examples/powertools-examples-serialization/README.md
rename to examples/powertools-examples-serialization/sam/README.md
index 4e3f66eb0..247752f29 100644
--- a/examples/powertools-examples-serialization/README.md
+++ b/examples/powertools-examples-serialization/sam/README.md
@@ -21,7 +21,7 @@ in JSON looks like this:
## Deploy the sample application
This sample is based on Serverless Application Model (SAM). To deploy it, check out the instructions for getting
-started with SAM in [the examples directory](../README.md)
+started with SAM in [the examples directory](../../README.md)
## Test the application
diff --git a/examples/powertools-examples-serialization/sam/events/APIGatewayEvent.json b/examples/powertools-examples-serialization/sam/events/APIGatewayEvent.json
new file mode 100644
index 000000000..cb38a3429
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/events/APIGatewayEvent.json
@@ -0,0 +1,63 @@
+{
+ "body": "{\"id\":1234, \"name\":\"product\", \"price\":42}",
+ "resource": "/{proxy+}",
+ "path": "/path/to/resource",
+ "httpMethod": "POST",
+ "isBase64Encoded": false,
+ "queryStringParameters": {
+ "foo": "bar"
+ },
+ "pathParameters": {
+ "proxy": "/path/to/resource"
+ },
+ "stageVariables": {
+ "baz": "qux"
+ },
+ "headers": {
+ "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
+ "Accept-Encoding": "gzip, deflate, sdch",
+ "Accept-Language": "en-US,en;q=0.8",
+ "Cache-Control": "max-age=0",
+ "CloudFront-Forwarded-Proto": "https",
+ "CloudFront-Is-Desktop-Viewer": "true",
+ "CloudFront-Is-Mobile-Viewer": "false",
+ "CloudFront-Is-SmartTV-Viewer": "false",
+ "CloudFront-Is-Tablet-Viewer": "false",
+ "CloudFront-Viewer-Country": "US",
+ "Host": "1234567890.execute-api.us-east-1.amazonaws.com",
+ "Upgrade-Insecure-Requests": "1",
+ "User-Agent": "Custom User Agent String",
+ "Via": "1.1 08f323deadbeefa7af34d5feb414ce27.cloudfront.net (CloudFront)",
+ "X-Amz-Cf-Id": "cDehVQoZnx43VYQb9j2-nvCh-9z396Uhbp027Y2JvkCPNLmGJHqlaA==",
+ "X-Forwarded-For": "127.0.0.1, 127.0.0.2",
+ "X-Forwarded-Port": "443",
+ "X-Forwarded-Proto": "https"
+ },
+ "requestContext": {
+ "accountId": "123456789012",
+ "resourceId": "123456",
+ "stage": "prod",
+ "requestId": "c6af9ac6-7b61-11e6-9a41-93e8deadbeef",
+ "requestTime": "09/Apr/2015:12:34:56 +0000",
+ "requestTimeEpoch": 1428582896000,
+ "identity": {
+ "cognitoIdentityPoolId": null,
+ "accountId": null,
+ "cognitoIdentityId": null,
+ "caller": null,
+ "accessKey": null,
+ "sourceIp": "127.0.0.1",
+ "cognitoAuthenticationType": null,
+ "cognitoAuthenticationProvider": null,
+ "userArn": null,
+ "userAgent": "Custom User Agent String",
+ "user": null
+ },
+ "path": "/prod/path/to/resource",
+ "resourcePath": "/{proxy+}",
+ "httpMethod": "POST",
+ "apiId": "1234567890",
+ "protocol": "HTTP/1.1"
+ }
+ }
+
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/sam/events/SQSEvent.json b/examples/powertools-examples-serialization/sam/events/SQSEvent.json
new file mode 100644
index 000000000..9056d3ef2
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/events/SQSEvent.json
@@ -0,0 +1,39 @@
+{
+ "Records": [
+ {
+ "messageId": "d9144555-9a4f-4ec3-99a0-34ce359b4b54",
+ "receiptHandle": "13e7f7851d2eaa5c01f208ebadbf1e72==",
+ "body": "{ \"id\": 1234, \"name\": \"product\", \"price\": 42}",
+ "attributes": {
+ "ApproximateReceiveCount": "1",
+ "SentTimestamp": "1601975706495",
+ "SenderId": "AROAIFU437PVZ5L2J53F5",
+ "ApproximateFirstReceiveTimestamp": "1601975706499"
+ },
+ "messageAttributes": {
+ },
+ "md5OfBody": "13e7f7851d2eaa5c01f208ebadbf1e72",
+ "eventSource": "aws:sqs",
+ "eventSourceARN": "arn:aws:sqs:eu-central-1:123456789012:TestLambda",
+ "awsRegion": "eu-central-1"
+ },
+ {
+ "messageId": "d9144555-9a4f-4ec3-99a0-34ce359b4b54",
+ "receiptHandle": "13e7f7851d2eaa5c01f208ebadbf1e72==",
+ "body": "{ \"id\": 12345, \"name\": \"product5\", \"price\": 45}",
+ "attributes": {
+ "ApproximateReceiveCount": "1",
+ "SentTimestamp": "1601975706495",
+ "SenderId": "AROAIFU437PVZ5L2J53F5",
+ "ApproximateFirstReceiveTimestamp": "1601975706499"
+ },
+ "messageAttributes": {
+
+ },
+ "md5OfBody": "13e7f7851d2eaa5c01f208ebadbf1e72",
+ "eventSource": "aws:sqs",
+ "eventSourceARN": "arn:aws:sqs:eu-central-1:123456789012:TestLambda",
+ "awsRegion": "eu-central-1"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/pom.xml b/examples/powertools-examples-serialization/sam/pom.xml
similarity index 96%
rename from examples/powertools-examples-serialization/pom.xml
rename to examples/powertools-examples-serialization/sam/pom.xml
index 35d0f76d1..7a261a2fd 100644
--- a/examples/powertools-examples-serialization/pom.xml
+++ b/examples/powertools-examples-serialization/sam/pom.xml
@@ -3,7 +3,7 @@
4.0.0
software.amazon.lambda.examples
2.1.1
- powertools-examples-serialization
+ powertools-examples-serialization-sam
jar
Powertools for AWS Lambda (Java) - Examples - Serialization
diff --git a/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java
new file mode 100644
index 000000000..3ca75cf4a
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/APIGatewayRequestDeserializationFunction.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2023 Amazon.com, Inc. or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.demo.serialization;
+
+import static software.amazon.lambda.powertools.utilities.EventDeserializer.extractDataFrom;
+
+import com.amazonaws.services.lambda.runtime.Context;
+import com.amazonaws.services.lambda.runtime.RequestHandler;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyResponseEvent;
+import java.util.HashMap;
+import java.util.Map;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class APIGatewayRequestDeserializationFunction
+ implements RequestHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(APIGatewayRequestDeserializationFunction.class);
+ private static final Map HEADERS = new HashMap() {
+ private static final long serialVersionUID = 7074189990115081999L;
+ {
+ put("Content-Type", "application/json");
+ put("X-Custom-Header", "application/json");
+ }
+ };
+
+ public APIGatewayProxyResponseEvent handleRequest(APIGatewayProxyRequestEvent event, Context context) {
+
+ Product product = extractDataFrom(event).as(Product.class);
+ LOGGER.info("\n=============== Deserialized request body: ===============");
+ LOGGER.info("product={}\n", product);
+
+ return new APIGatewayProxyResponseEvent()
+ .withHeaders(HEADERS)
+ .withStatusCode(200)
+ .withBody("Received request for productId: " + product.getId());
+ }
+}
+
diff --git a/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/Product.java b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/Product.java
new file mode 100644
index 000000000..25bae34f6
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/Product.java
@@ -0,0 +1,63 @@
+/*
+ * Copyright 2023 Amazon.com, Inc. or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.demo.serialization;
+
+public class Product {
+ private long id;
+ private String name;
+ private double price;
+
+ public Product() {
+ }
+
+ public Product(long id, String name, double price) {
+ this.id = id;
+ this.name = name;
+ this.price = price;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public double getPrice() {
+ return price;
+ }
+
+ public void setPrice(double price) {
+ this.price = price;
+ }
+
+ @Override
+ public String toString() {
+ return "Product{" +
+ "id=" + id +
+ ", name='" + name + '\'' +
+ ", price=" + price +
+ '}';
+ }
+}
diff --git a/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java
new file mode 100644
index 000000000..79097e19c
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/src/main/java/org/demo/serialization/SQSEventDeserializationFunction.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2023 Amazon.com, Inc. or its affiliates.
+ * Licensed under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+package org.demo.serialization;
+
+import static software.amazon.lambda.powertools.utilities.EventDeserializer.extractDataFrom;
+
+import com.amazonaws.services.lambda.runtime.Context;
+import com.amazonaws.services.lambda.runtime.RequestHandler;
+import com.amazonaws.services.lambda.runtime.events.SQSEvent;
+import java.util.List;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+public class SQSEventDeserializationFunction implements RequestHandler {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SQSEventDeserializationFunction.class);
+
+ public String handleRequest(SQSEvent event, Context context) {
+ List products = extractDataFrom(event).asListOf(Product.class);
+
+ LOGGER.info("\n=============== Deserialized messages: ===============");
+ LOGGER.info("products={}\n", products);
+
+ return "Number of received messages: " + products.size();
+ }
+}
+
diff --git a/examples/powertools-examples-serialization/sam/src/main/resources/log4j2.xml b/examples/powertools-examples-serialization/sam/src/main/resources/log4j2.xml
new file mode 100644
index 000000000..fe943d707
--- /dev/null
+++ b/examples/powertools-examples-serialization/sam/src/main/resources/log4j2.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/examples/powertools-examples-serialization/template.yaml b/examples/powertools-examples-serialization/sam/template.yaml
similarity index 100%
rename from examples/powertools-examples-serialization/template.yaml
rename to examples/powertools-examples-serialization/sam/template.yaml
diff --git a/powertools-serialization/pom.xml b/powertools-serialization/pom.xml
index 891a1582a..bb2f0fb34 100644
--- a/powertools-serialization/pom.xml
+++ b/powertools-serialization/pom.xml
@@ -70,6 +70,26 @@
test
+
+
+
+
+
+ src/main/resources
+
+
+
+
+ dev.aspectj
+ aspectj-maven-plugin
+ ${aspectj-maven-plugin.version}
+
+ true
+
+
+
+
+
generate-graalvm-files
@@ -159,23 +179,5 @@
-
-
-
-
- src/main/resources
-
-
-
-
- dev.aspectj
- aspectj-maven-plugin
- ${aspectj-maven-plugin.version}
-
- true
-
-
-
-
diff --git a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/jni-config.json b/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/jni-config.json
deleted file mode 100644
index 079c02a4d..000000000
--- a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/jni-config.json
+++ /dev/null
@@ -1,18 +0,0 @@
-[
-{
- "name":"java.lang.String",
- "methods":[{"name":"lastIndexOf","parameterTypes":["int"] }, {"name":"substring","parameterTypes":["int"] }]
-},
-{
- "name":"java.lang.System",
- "methods":[{"name":"getProperty","parameterTypes":["java.lang.String"] }, {"name":"setProperty","parameterTypes":["java.lang.String","java.lang.String"] }]
-},
-{
- "name":"org.apache.maven.surefire.booter.ForkedBooter",
- "methods":[{"name":"main","parameterTypes":["java.lang.String[]"] }]
-},
-{
- "name":"sun.management.VMManagementImpl",
- "fields":[{"name":"compTimeMonitoringSupport"}, {"name":"currentThreadCpuTimeSupport"}, {"name":"objectMonitorUsageSupport"}, {"name":"otherThreadCpuTimeSupport"}, {"name":"remoteDiagnosticCommandsSupport"}, {"name":"synchronizerUsageSupport"}, {"name":"threadAllocatedMemorySupport"}, {"name":"threadContentionMonitoringSupport"}]
-}
-]
diff --git a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json b/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json
index 1a4f89735..e20bd748f 100644
--- a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json
+++ b/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json
@@ -309,7 +309,7 @@
"allDeclaredFields":true,
"queryAllDeclaredMethods":true,
"queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"setAttributes","parameterTypes":["java.util.Map"] }, {"name":"setAwsRegion","parameterTypes":["java.lang.String"] }, {"name":"setBody","parameterTypes":["java.lang.String"] }, {"name":"setEventSource","parameterTypes":["java.lang.String"] }, {"name":"setEventSourceArn","parameterTypes":["java.lang.String"] }, {"name":"setMd5OfBody","parameterTypes":["java.lang.String"] }, {"name":"setMessageAttributes","parameterTypes":["java.util.Map"] }, {"name":"setMessageId","parameterTypes":["java.lang.String"] }, {"name":"setReceiptHandle","parameterTypes":["java.lang.String"] }]
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"setAttributes","parameterTypes":["java.util.Map"] }, {"name":"setAwsRegion","parameterTypes":["java.lang.String"] }, {"name":"setBody","parameterTypes":["java.lang.String"] }, {"name":"setEventSource","parameterTypes":["java.lang.String"] }, {"name":"setEventSourceArn","parameterTypes":["java.lang.String"] }, {"name":"setMd5OfBody","parameterTypes":["java.lang.String"] }, {"name":"setMd5OfMessageAttributes","parameterTypes":["java.lang.String"] },{"name":"setMessageAttributes","parameterTypes":["java.util.Map"] }, {"name":"setMessageId","parameterTypes":["java.lang.String"] }, {"name":"setReceiptHandle","parameterTypes":["java.lang.String"] }]
},
{
"name":"com.amazonaws.services.lambda.runtime.events.ScheduledEvent",
@@ -423,48 +423,5 @@
{
"name":"org.joda.time.DateTime",
"methods":[{"name":"parse","parameterTypes":["java.lang.String"] }]
-},
-{
- "name":"software.amazon.lambda.powertools.utilities.EventDeserializerTest",
- "allDeclaredFields":true,
- "allDeclaredClasses":true,
- "queryAllDeclaredMethods":true,
- "queryAllPublicMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"testDeserializeALBEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ApplicationLoadBalancerRequestEvent"] }, {"name":"testDeserializeAMQEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ActiveMQEvent"] }, {"name":"testDeserializeAPIGWEventBodyAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeAPIGatewayEventAsList_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeAPIGatewayMapEventAsList_shouldThrowException","parameterTypes":["java.util.Map"] }, {"name":"testDeserializeAPIGatewayNoBodyAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeAPIGatewayNoBody_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeApiGWV2EventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent"] }, {"name":"testDeserializeCWLEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent"] }, {"name":"testDeserializeCfcrEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent"] }, {"name":"testDeserializeEmptyEventAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeKFEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent"] }, {"name":"testDeserializeKafipEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsFirehoseInputPreprocessingEvent"] }, {"name":"testDeserializeKafkaEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KafkaEvent"] }, {"name":"testDeserializeKasipEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsStreamsInputPreprocessingEvent"] }, {"name":"testDeserializeKinesisEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisEvent"] }, {"name":"testDeserializeMapAsObject_shouldReturnObject","parameterTypes":[] }, {"name":"testDeserializeProductAsProduct_shouldReturnProduct","parameterTypes":[] }, {"name":"testDeserializeRabbitMQEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.RabbitMQEvent"] }, {"name":"testDeserializeSNSEventMessageAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SNSEvent"] }, {"name":"testDeserializeSQSEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeSQSEventMessageAsObject_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeSQSEventNoBody_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeScheduledEventMessageAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ScheduledEvent"] }, {"name":"testDeserializeStringArrayAsList_shouldReturnList","parameterTypes":[] }, {"name":"testDeserializeStringAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeStringAsObject_shouldReturnObject","parameterTypes":[] }, {"name":"testDeserializeStringAsString_shouldReturnString","parameterTypes":[] }]
-},
-{
- "name":"software.amazon.lambda.powertools.utilities.jmespath.Base64FunctionTest",
- "allDeclaredFields":true,
- "allDeclaredClasses":true,
- "queryAllDeclaredMethods":true,
- "queryAllPublicMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"testPowertoolsBase64","parameterTypes":[] }]
-},
-{
- "name":"software.amazon.lambda.powertools.utilities.jmespath.Base64GZipFunctionTest",
- "allDeclaredFields":true,
- "allDeclaredClasses":true,
- "queryAllDeclaredMethods":true,
- "queryAllPublicMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"testBase64GzipDecompressNull","parameterTypes":[] }, {"name":"testConstructor","parameterTypes":[] }, {"name":"testPowertoolsGzip","parameterTypes":[] }, {"name":"testPowertoolsGzipEmptyJsonAttribute","parameterTypes":[] }, {"name":"testPowertoolsGzipNotCompressedJsonAttribute","parameterTypes":[] }, {"name":"testPowertoolsGzipWrongArgumentType","parameterTypes":[] }]
-},
-{
- "name":"software.amazon.lambda.powertools.utilities.jmespath.JsonFunctionTest",
- "allDeclaredFields":true,
- "allDeclaredClasses":true,
- "queryAllDeclaredMethods":true,
- "queryAllPublicMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"testJsonFunction","parameterTypes":[] }, {"name":"testJsonFunctionChild","parameterTypes":[] }]
-},
-{
- "name":"software.amazon.lambda.powertools.utilities.model.Product",
- "allDeclaredFields":true,
- "queryAllDeclaredMethods":true,
- "queryAllDeclaredConstructors":true,
- "methods":[{"name":"","parameterTypes":[] }, {"name":"setId","parameterTypes":["long"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPrice","parameterTypes":["double"] }]
}
]
diff --git a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json b/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json
index d5bd7e14c..58b01cd07 100644
--- a/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json
+++ b/powertools-serialization/src/main/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json
@@ -6,36 +6,10 @@
"pattern":"\\QMETA-INF/services/java.time.zone.ZoneRulesProvider\\E"
}, {
"pattern":"\\QMETA-INF/services/org.apache.maven.surefire.spi.MasterProcessChannelProcessorFactory\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.assertj.core.configuration.Configuration\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.assertj.core.presentation.Representation\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.junit.platform.engine.TestEngine\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.junit.platform.launcher.LauncherDiscoveryListener\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.junit.platform.launcher.LauncherSessionListener\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.junit.platform.launcher.PostDiscoveryFilter\\E"
- }, {
- "pattern":"\\QMETA-INF/services/org.junit.platform.launcher.TestExecutionListener\\E"
}, {
"pattern":"\\QMETA-INF/services/org.slf4j.spi.SLF4JServiceProvider\\E"
}, {
- "pattern":"\\Qalb_event.json\\E"
- }, {
- "pattern":"\\Qamq_event.json\\E"
- }, {
- "pattern":"\\Qapigw_event.json\\E"
- }, {
- "pattern":"\\Qapigw_event_no_body.json\\E"
- }, {
- "pattern":"\\Qapigwv2_event.json\\E"
- }, {
- "pattern":"\\Qcfcr_event.json\\E"
- }, {
- "pattern":"\\Qcom/amazonaws/lambda/thirdparty/org/joda/time/tz/data/Europe/Berlin\\E"
+ "pattern":"\\Qcom/amazonaws/lambda/thirdparty/org/joda/time/tz/data/Europe/Amsterdam\\E"
}, {
"pattern":"\\Qcom/amazonaws/lambda/thirdparty/org/joda/time/tz/data/ZoneInfoMap\\E"
}, {
@@ -75,11 +49,9 @@
}, {
"pattern":"\\Qcom/amazonaws/services/lambda/runtime/serialization/factories/sqs_event_no_body.json\\E"
}, {
- "pattern":"\\Qorg/joda/time/tz/data/Europe/Berlin\\E"
+ "pattern":"\\Qorg/joda/time/tz/data/Europe/Amsterdam\\E"
}, {
"pattern":"\\Qorg/joda/time/tz/data/ZoneInfoMap\\E"
- }, {
- "pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"
}]},
"bundles":[]
}
diff --git a/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json b/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json
new file mode 100644
index 000000000..b781d2609
--- /dev/null
+++ b/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/reflect-config.json
@@ -0,0 +1,45 @@
+[
+{
+ "name":"software.amazon.lambda.powertools.utilities.EventDeserializerTest",
+ "allDeclaredFields":true,
+ "allDeclaredClasses":true,
+ "queryAllDeclaredMethods":true,
+ "queryAllPublicMethods":true,
+ "queryAllDeclaredConstructors":true,
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"testDeserializeALBEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ApplicationLoadBalancerRequestEvent"] }, {"name":"testDeserializeAMQEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ActiveMQEvent"] }, {"name":"testDeserializeAPIGWEventBodyAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeAPIGatewayEventAsList_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeAPIGatewayMapEventAsList_shouldThrowException","parameterTypes":["java.util.Map"] }, {"name":"testDeserializeAPIGatewayNoBodyAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeAPIGatewayNoBody_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent"] }, {"name":"testDeserializeApiGWV2EventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent"] }, {"name":"testDeserializeCWLEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.CloudWatchLogsEvent"] }, {"name":"testDeserializeCfcrEventMessageAsObjectShouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.CloudFormationCustomResourceEvent"] }, {"name":"testDeserializeEmptyEventAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeKFEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisFirehoseEvent"] }, {"name":"testDeserializeKafipEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsFirehoseInputPreprocessingEvent"] }, {"name":"testDeserializeKafkaEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KafkaEvent"] }, {"name":"testDeserializeKasipEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisAnalyticsStreamsInputPreprocessingEvent"] }, {"name":"testDeserializeKinesisEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.KinesisEvent"] }, {"name":"testDeserializeMapAsObject_shouldReturnObject","parameterTypes":[] }, {"name":"testDeserializeProductAsProduct_shouldReturnProduct","parameterTypes":[] }, {"name":"testDeserializeRabbitMQEventMessageAsListShouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.RabbitMQEvent"] }, {"name":"testDeserializeSNSEventMessageAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SNSEvent"] }, {"name":"testDeserializeSQSEventMessageAsList_shouldReturnList","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeSQSEventMessageAsObject_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeSQSEventNoBody_shouldThrowException","parameterTypes":["com.amazonaws.services.lambda.runtime.events.SQSEvent"] }, {"name":"testDeserializeScheduledEventMessageAsObject_shouldReturnObject","parameterTypes":["com.amazonaws.services.lambda.runtime.events.ScheduledEvent"] }, {"name":"testDeserializeStringArrayAsList_shouldReturnList","parameterTypes":[] }, {"name":"testDeserializeStringAsList_shouldThrowException","parameterTypes":[] }, {"name":"testDeserializeStringAsObject_shouldReturnObject","parameterTypes":[] }, {"name":"testDeserializeStringAsString_shouldReturnString","parameterTypes":[] }]
+},
+{
+ "name":"software.amazon.lambda.powertools.utilities.jmespath.Base64FunctionTest",
+ "allDeclaredFields":true,
+ "allDeclaredClasses":true,
+ "queryAllDeclaredMethods":true,
+ "queryAllPublicMethods":true,
+ "queryAllDeclaredConstructors":true,
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"testPowertoolsBase64","parameterTypes":[] }]
+},
+{
+ "name":"software.amazon.lambda.powertools.utilities.jmespath.Base64GZipFunctionTest",
+ "allDeclaredFields":true,
+ "allDeclaredClasses":true,
+ "queryAllDeclaredMethods":true,
+ "queryAllPublicMethods":true,
+ "queryAllDeclaredConstructors":true,
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"testBase64GzipDecompressNull","parameterTypes":[] }, {"name":"testConstructor","parameterTypes":[] }, {"name":"testPowertoolsGzip","parameterTypes":[] }, {"name":"testPowertoolsGzipEmptyJsonAttribute","parameterTypes":[] }, {"name":"testPowertoolsGzipNotCompressedJsonAttribute","parameterTypes":[] }, {"name":"testPowertoolsGzipWrongArgumentType","parameterTypes":[] }]
+},
+{
+ "name":"software.amazon.lambda.powertools.utilities.jmespath.JsonFunctionTest",
+ "allDeclaredFields":true,
+ "allDeclaredClasses":true,
+ "queryAllDeclaredMethods":true,
+ "queryAllPublicMethods":true,
+ "queryAllDeclaredConstructors":true,
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"testJsonFunction","parameterTypes":[] }, {"name":"testJsonFunctionChild","parameterTypes":[] }]
+},
+{
+ "name":"software.amazon.lambda.powertools.utilities.model.Product",
+ "allDeclaredFields":true,
+ "queryAllDeclaredMethods":true,
+ "queryAllDeclaredConstructors":true,
+ "methods":[{"name":"","parameterTypes":[] }, {"name":"setId","parameterTypes":["long"] }, {"name":"setName","parameterTypes":["java.lang.String"] }, {"name":"setPrice","parameterTypes":["double"] }]
+}
+]
diff --git a/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json b/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json
new file mode 100644
index 000000000..986bf5b4a
--- /dev/null
+++ b/powertools-serialization/src/test/resources/META-INF/native-image/software.amazon.lambda/powertools-serialization/resource-config.json
@@ -0,0 +1,51 @@
+{
+ "resources":{
+ "includes":[{
+ "pattern":"\\Qalb_event.json\\E"
+ }, {
+ "pattern":"\\Qamq_event.json\\E"
+ }, {
+ "pattern":"\\Qapigw_event.json\\E"
+ }, {
+ "pattern":"\\Qapigw_event_no_body.json\\E"
+ }, {
+ "pattern":"\\Qapigwv2_event.json\\E"
+ }, {
+ "pattern":"\\Qcfcr_event.json\\E"
+ }, {
+ "pattern":"\\Qcustom_event.json\\E"
+ }, {
+ "pattern":"\\Qcustom_event_gzip.json\\E"
+ }, {
+ "pattern":"\\Qcustom_event_json.json\\E"
+ }, {
+ "pattern":"\\Qcustom_event_map.json\\E"
+ }, {
+ "pattern":"\\Qcwl_event.json\\E"
+ }, {
+ "pattern":"\\Qjunit-platform.properties\\E"
+ }, {
+ "pattern":"\\Qkafip_event.json\\E"
+ }, {
+ "pattern":"\\Qkafka_event.json\\E"
+ }, {
+ "pattern":"\\Qkasip_event.json\\E"
+ }, {
+ "pattern":"\\Qkf_event.json\\E"
+ }, {
+ "pattern":"\\Qkinesis_event.json\\E"
+ }, {
+ "pattern":"\\Qrabbitmq_event.json\\E"
+ }, {
+ "pattern":"\\Qscheduled_event.json\\E"
+ }, {
+ "pattern":"\\Qsimplelogger.properties\\E"
+ }, {
+ "pattern":"\\Qsns_event.json\\E"
+ }, {
+ "pattern":"\\Qsqs_event.json\\E"
+ }, {
+ "pattern":"\\Qsqs_event_no_body.json\\E"
+ }]},
+ "bundles":[]
+}