diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/FunctionInvoker.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/FunctionInvoker.java index f2273bd32..470dcb248 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/FunctionInvoker.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/FunctionInvoker.java @@ -161,10 +161,10 @@ public class FunctionInvoker implements RequestStreamHandler { byte[] payload = StreamUtils.copyToByteArray(input); if (logger.isInfoEnabled()) { - logger.info("===> Incoming JSON for ApiGateway Event: " + new String(payload)); + logger.info("Incoming JSON for ApiGateway Event: " + new String(payload)); } - Message message = null; + MessageBuilder messageBuilder = null; Object request = this.mapper.readValue(payload, Object.class); Type inputType = FunctionTypeUtils.getInputType(function.getFunctionType(), 0); if (FunctionTypeUtils.isMessage(inputType)) { @@ -178,39 +178,29 @@ public class FunctionInvoker implements RequestStreamHandler { Assert.isTrue(inputType instanceof Class && KinesisEvent.class.isAssignableFrom((Class) inputType) || mapInputType, "Only KinesisEvent or Map type is supported as input type for functions that accept with Kinesis Event"); Object event = mapInputType ? requestMap : this.mapper.convertValue(requestMap, KinesisEvent.class); - message = MessageBuilder.withPayload(event).setHeader("aws-context", context).build(); + messageBuilder = MessageBuilder.withPayload(event); } - else if (requestMap.containsKey("httpMethod")) { + else if (requestMap.containsKey("httpMethod")) { // API Gateway logger.info("Incoming request is API Gateway"); if (inputType.getTypeName().endsWith(APIGatewayProxyRequestEvent.class.getSimpleName())) { APIGatewayProxyRequestEvent gatewayEvent = this.mapper.convertValue(requestMap, APIGatewayProxyRequestEvent.class); - message = MessageBuilder.withPayload(gatewayEvent).setHeader("aws-context", context).build(); + messageBuilder = MessageBuilder.withPayload(gatewayEvent); } else if (mapInputType) { - message = MessageBuilder.withPayload(requestMap) - .setHeader("httpMethod", requestMap.get("httpMethod")) - .setHeader("aws-context", context) - .build(); + messageBuilder = MessageBuilder.withPayload(requestMap) + .setHeader("httpMethod", requestMap.get("httpMethod")); } else { Object body = requestMap.remove("body"); - if (body instanceof String) { - body = ("\"" + body + "\"").getBytes(StandardCharsets.UTF_8); - } - else { // assume array or map - body = mapper.writeValueAsBytes(body); - } - - message = MessageBuilder.withPayload(body) - .copyHeaders(requestMap) - .setHeader("aws-context", context) - .build(); + body = body instanceof String ? ("\"" + body + "\"").getBytes(StandardCharsets.UTF_8) : mapper.writeValueAsBytes(body); + messageBuilder = MessageBuilder.withPayload(body) + .copyHeaders(requestMap); } } } - if (message == null) { - message = MessageBuilder.withPayload(payload).setHeader("aws-context", context).build(); + if (messageBuilder == null) { + messageBuilder = MessageBuilder.withPayload(payload); } - return message; + return messageBuilder.setHeader("aws-context", context).build(); } } diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java index eb1e7877c..81ada8486 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java @@ -379,6 +379,7 @@ public class FunctionInvokerTests { assertThat(result.get("body")).isEqualTo("hello"); } + @SuppressWarnings("rawtypes") @Test public void testApiGatewayEventAsMap() throws Exception { System.setProperty("MAIN_CLASS", ApiGatewayConfiguration.class.getName()); diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java index 73f5a9791..55f5ab641 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JsonMapper.java @@ -71,9 +71,6 @@ public abstract class JsonMapper { } result = ((String) value).getBytes(StandardCharsets.UTF_8); } - else { - logger.warn("Object does not represent a valid JSON. Object is: " + value); - } return result; }