diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
index 3ac0c535d..c9d58ae5b 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml
@@ -20,13 +20,18 @@
UTF-8
UTF-8
1.8
- 2.2.6
- 1.11.825
+ 3.9.0
+ 1.12.29
1.0.3
1.0.3
+
+ com.amazonaws
+ amazon-kinesis-client
+ 1.14.4
+
org.springframework.cloud
spring-cloud-function-context
@@ -56,10 +61,16 @@
1.0.0
provided
+
+ com.amazonaws
+ aws-lambda-java-serialization
+ 1.0.0
+ provided
+
com.amazonaws
aws-lambda-java-core
- 1.2.0
+ 1.2.1
provided
diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
index ea18f27a8..bea173a18 100644
--- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
+++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSLambdaUtils.java
@@ -16,6 +16,7 @@
package org.springframework.cloud.function.adapter.aws;
+import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
@@ -23,12 +24,18 @@ import java.nio.charset.StandardCharsets;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
-import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent;
+import com.amazonaws.services.lambda.runtime.events.APIGatewayV2HTTPEvent;
+import com.amazonaws.services.lambda.runtime.events.KinesisEvent;
+import com.amazonaws.services.lambda.runtime.events.S3Event;
+import com.amazonaws.services.lambda.runtime.events.SNSEvent;
+import com.amazonaws.services.lambda.runtime.events.SQSEvent;
+import com.amazonaws.services.lambda.runtime.serialization.PojoSerializer;
+import com.amazonaws.services.lambda.runtime.serialization.events.LambdaEventSerializers;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
@@ -45,8 +52,6 @@ import org.springframework.lang.Nullable;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageHeaders;
import org.springframework.messaging.support.MessageBuilder;
-import org.springframework.util.Assert;
-import org.springframework.util.ClassUtils;
/**
*
@@ -57,6 +62,8 @@ final class AWSLambdaUtils {
private static Log logger = LogFactory.getLog(AWSLambdaUtils.class);
+ private static final String AWS_API_GATEWAY = "aws-api-gateway";
+
private AWSLambdaUtils() {
}
@@ -66,71 +73,82 @@ final class AWSLambdaUtils {
return generateMessage(payload, headers, inputType, objectMapper, null);
}
+ private static boolean isSupportedAWSType(Type inputType) {
+ return APIGatewayV2HTTPEvent.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType))
+ || S3Event.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType))
+ || APIGatewayProxyRequestEvent.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType))
+ || SNSEvent.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType))
+ || SQSEvent.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType))
+ || KinesisEvent.class.isAssignableFrom(FunctionTypeUtils.getRawType(inputType));
+ }
+
@SuppressWarnings({ "unchecked", "rawtypes" })
public static Message generateMessage(byte[] payload, MessageHeaders headers,
Type inputType, ObjectMapper objectMapper, @Nullable Context awsContext) {
- if (!objectMapper.isEnabled(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES)) {
- configureObjectMapper(objectMapper);
- }
-
if (logger.isInfoEnabled()) {
logger.info("Incoming JSON Event: " + new String(payload));
}
- MessageBuilder messageBuilder = null;
- Object request;
- try {
- request = objectMapper.readValue(payload, Object.class);
- }
- catch (Exception e) {
- throw new IllegalStateException(e);
- }
if (FunctionTypeUtils.isMessage(inputType)) {
inputType = FunctionTypeUtils.getImmediateGenericType(inputType, 0);
}
- boolean mapInputType = (inputType instanceof ParameterizedType && ((Class>) ((ParameterizedType) inputType).getRawType()).isAssignableFrom(Map.class));
- if (request instanceof Map) {
- Map requestMap = (Map) request;
- if (requestMap.containsKey("Records")) {
- List