From f3573f359d17bd6fa3e4f42b66e722c49d13af95 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 8 Feb 2021 10:36:00 +0100 Subject: [PATCH] GH-639 Fix NPE for when using Supplier with AWS API Gateway Resolves #639 --- .../function/adapter/aws/AWSLambdaUtils.java | 2 +- .../adapter/aws/FunctionInvokerTests.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) 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 e74034776..5ed017389 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 @@ -202,7 +202,7 @@ final class AWSLambdaUtils { } private static boolean isTypeAnApiGatewayRequest(Type type) { - return isAPIGatewayProxyRequestEventPresent() + return type != null && isAPIGatewayProxyRequestEventPresent() ? type.getTypeName().endsWith(APIGatewayProxyRequestEvent.class.getSimpleName()) : false; } 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 0e642a127..fbfeffe8a 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 @@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.function.Consumer; import java.util.function.Function; +import java.util.function.Supplier; import com.amazonaws.services.lambda.runtime.events.APIGatewayProxyRequestEvent; import com.amazonaws.services.lambda.runtime.events.KinesisEvent; @@ -625,6 +626,22 @@ public class FunctionInvokerTests { assertThat(result.get("body")).isEqualTo("\"hello\""); } + @SuppressWarnings("rawtypes") + @Test + public void testApiGatewayAsSupplier() throws Exception { + System.setProperty("MAIN_CLASS", ApiGatewayConfiguration.class.getName()); + System.setProperty("spring.cloud.function.definition", "supply"); + FunctionInvoker invoker = new FunctionInvoker(); + + InputStream targetStream = new ByteArrayInputStream(this.apiGatewayEvent.getBytes()); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + invoker.handleRequest(targetStream, output, null); + + Map result = mapper.readValue(output.toByteArray(), Map.class); + System.out.println(result); + assertThat(result.get("body")).isEqualTo("\"boom\""); + } + @SuppressWarnings("rawtypes") @Test public void testApiGatewayEventAsMessage() throws Exception { @@ -840,6 +857,12 @@ public class FunctionInvokerTests { @Configuration public static class ApiGatewayConfiguration { + @Bean + public Supplier supply() { + return () -> "boom"; + } + + @Bean public Consumer consume() { return v -> System.out.println(v);