From 3b880300385fb6e8a4fff41b91bd9e3aa0954cf6 Mon Sep 17 00:00:00 2001 From: Urs Keller Date: Tue, 9 May 2023 17:24:05 +0200 Subject: [PATCH] Remove dependency on servlet container from AWSCustomRuntime --- .../adapter/aws/CustomRuntimeEventLoop.java | 2 +- .../adapter/test/aws/AWSCustomRuntime.java | 16 +++++++++++----- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoop.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoop.java index 8c9e79df2..29f69fcf2 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoop.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoop.java @@ -135,7 +135,7 @@ public final class CustomRuntimeEventLoop implements SmartLifecycle { logger.debug("New Event received: " + response); } - if (response != null) { + if (response != null && response.hasBody()) { String requestId = response.getHeaders().getFirst("Lambda-Runtime-Aws-Request-Id"); try { FunctionInvocationWrapper function = locateFunction(environment, functionCatalog, response.getHeaders()); diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/test/aws/AWSCustomRuntime.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/test/aws/AWSCustomRuntime.java index afc7ba394..4b396511a 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/test/aws/AWSCustomRuntime.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/test/aws/AWSCustomRuntime.java @@ -16,6 +16,7 @@ package org.springframework.cloud.function.adapter.test.aws; +import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue; import java.util.concurrent.TimeUnit; @@ -23,8 +24,9 @@ import java.util.function.Consumer; import java.util.function.Supplier; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; -import org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext; +import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; +import org.springframework.core.env.MapPropertySource; import org.springframework.messaging.Message; import org.springframework.messaging.support.MessageBuilder; import org.springframework.util.MimeTypeUtils; @@ -42,9 +44,10 @@ public class AWSCustomRuntime { BlockingQueue> outputQueue = new ArrayBlockingQueue<>(3); - public AWSCustomRuntime(ServletWebServerApplicationContext context) { - int port = context.getWebServer().getPort(); - System.setProperty("AWS_LAMBDA_RUNTIME_API", "localhost:" + port); + public AWSCustomRuntime(ConfigurableApplicationContext context) { + context.getEnvironment().getPropertySources().addFirst( + new MapPropertySource("AWSCustomRuntime", + Map.of("AWS_LAMBDA_RUNTIME_API", "localhost:${local.server.port}"))); } @Bean("2018-06-01/runtime/invocation/consume/response") @@ -58,7 +61,10 @@ public class AWSCustomRuntime { return () -> { try { - Object value = inputQueue.poll(Long.MAX_VALUE, TimeUnit.SECONDS); + Object value = inputQueue.poll(1L, TimeUnit.SECONDS); + if (value == null) { + return MessageBuilder.withPayload("").build(); + } if (!(value instanceof Message)) { return MessageBuilder.withPayload((String) value) .setHeader("Lambda-Runtime-Aws-Request-Id", "consume")