From 3f1315c523be8864ec2490a10a7d62b22db71b91 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 19 Oct 2020 14:57:55 +0200 Subject: [PATCH] Consolidate isMessage() operation --- .../adapter/aws/SpringBootApiGatewayRequestHandler.java | 8 ++++++-- .../adapter/aws/SpringBootKinesisEventHandler.java | 8 ++++++-- .../adapter/azure/AzureSpringBootHttpRequestHandler.java | 3 ++- .../cloud/function/context/catalog/FunctionInspector.java | 5 +++++ .../cloud/function/context/catalog/FunctionTypeUtils.java | 6 ------ .../ContextFunctionCatalogAutoConfigurationTests.java | 4 ++-- .../cloud/function/web/RequestProcessor.java | 7 ++++--- 7 files changed, 25 insertions(+), 16 deletions(-) diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java index 90689c4d7..760903a1d 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootApiGatewayRequestHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,6 +29,7 @@ import org.apache.commons.codec.binary.Base64; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cloud.function.context.catalog.FunctionInspector; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.http.HttpStatus; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; @@ -39,7 +40,10 @@ import org.springframework.messaging.support.GenericMessage; * @author Oleg Zhurakousky * @author Semyon Fishman * @author Markus Gulden + * + * @deprecated since 3.1 in favor of {@link FunctionInvoker} */ +@Deprecated public class SpringBootApiGatewayRequestHandler extends SpringBootRequestHandler { @@ -66,7 +70,7 @@ public class SpringBootApiGatewayRequestHandler extends } private boolean functionAcceptsMessage() { - return this.inspector.isMessage(function()); + return ((FunctionInvocationWrapper) function()).isInputTypeMessage(); } private Object deserializeBody(APIGatewayProxyRequestEvent event) { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootKinesisEventHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootKinesisEventHandler.java index e2e52afc9..161e95f8b 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootKinesisEventHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/SpringBootKinesisEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2019 the original author or authors. + * Copyright 2012-2020 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import com.amazonaws.services.lambda.runtime.events.KinesisEvent; import com.fasterxml.jackson.databind.ObjectMapper; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.messaging.Message; import org.springframework.messaging.support.GenericMessage; @@ -37,7 +38,10 @@ import static java.util.stream.Collectors.toList; * @author Mark Fisher * @author Halvdan Hoem Grelland * @author Oleg Zhurakousky + * + * @deprecated since 3.1 in favor of {@link FunctionInvoker} */ +@Deprecated public class SpringBootKinesisEventHandler extends SpringBootRequestHandler { @@ -62,7 +66,7 @@ public class SpringBootKinesisEventHandler protected Object convertEvent(KinesisEvent event) { List payloads = deserializePayloads(event.getRecords()); - if (getInspector().isMessage(function())) { + if (((FunctionInvocationWrapper) function()).isInputTypeMessage()) { return wrapInMessages(payloads); } else { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootHttpRequestHandler.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootHttpRequestHandler.java index 6ceed769d..8dc3ae7ea 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootHttpRequestHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureSpringBootHttpRequestHandler.java @@ -25,6 +25,7 @@ import com.microsoft.azure.functions.HttpRequestMessage; import com.microsoft.azure.functions.HttpResponseMessage; import com.microsoft.azure.functions.HttpResponseMessage.Builder; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.support.GenericMessage; @@ -74,7 +75,7 @@ public class AzureSpringBootHttpRequestHandler extends protected boolean functionAcceptsMessage() { - return this.getInspector().isMessage(function()); + return ((FunctionInvocationWrapper) function()).isInputTypeMessage(); } private MessageHeaders getHeaders(HttpRequestMessage event) { diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionInspector.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionInspector.java index f45a897a1..a6f72922c 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionInspector.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionInspector.java @@ -36,6 +36,11 @@ public interface FunctionInspector { FunctionRegistration getRegistration(Object function); + /** + * + * @deprecated since 3.1 no longer used by the framework + */ + @Deprecated default boolean isMessage(Object function) { if (function == null) { return false; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java index e6ff4f0c3..b0ae74874 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/FunctionTypeUtils.java @@ -191,9 +191,6 @@ public final class FunctionTypeUtils { @SuppressWarnings("unchecked") public static Type getInputType(Type functionType) { assertSupportedTypes(functionType); -// if (isSupplier(functionType)) { -// return getOutputType(functionType, index); -// } if (functionType instanceof Class) { Class functionClass = (Class) functionType; if (Function.class.isAssignableFrom(functionClass)) { @@ -205,9 +202,6 @@ public final class FunctionTypeUtils { else { return null; } -// else if (Supplier.class.isAssignableFrom(functionClass)) { -// functionType = TypeResolver.reify(Supplier.class, (Class>) functionClass); -// } } Type inputType = Object.class; diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java index d4d498e87..406148c0c 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfigurationTests.java @@ -48,6 +48,7 @@ import org.springframework.cloud.function.context.FunctionCatalog; import org.springframework.cloud.function.context.FunctionRegistration; import org.springframework.cloud.function.context.FunctionRegistry; import org.springframework.cloud.function.context.catalog.FunctionInspector; +import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.cloud.function.inject.FooConfiguration; import org.springframework.cloud.function.scan.ScannedFunction; import org.springframework.cloud.function.test.GenericFunction; @@ -378,8 +379,7 @@ public class ContextFunctionCatalogAutoConfigurationTests { assertThat(this.inspector .getInputWrapper(this.catalog.lookup(Function.class, "function"))) .isAssignableFrom(Integer.class); - assertThat( - this.inspector.isMessage(this.catalog.lookup(Function.class, "function"))) + assertThat(((FunctionInvocationWrapper) this.catalog.lookup(Function.class, "function")).isInputTypeMessage()) .isTrue(); } diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java index 8cc08c6fe..7c1d38754 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/RequestProcessor.java @@ -244,7 +244,8 @@ public class RequestProcessor { + "`"); } - if (this.inspector.isMessage(function)) { + + if (function != null && ((FunctionInvocationWrapper) function).isInputTypeMessage()) { flux = messages(wrapper, function, flux); } Mono> responseEntityMono = null; @@ -324,7 +325,7 @@ public class RequestProcessor { private Mono> stream(FunctionWrapper request, Publisher result) { BodyBuilder builder = ResponseEntity.ok(); - if (this.inspector.isMessage(request.handler())) { + if (((FunctionInvocationWrapper) request.handler()).isInputTypeMessage()) { result = Flux.from(result) .doOnNext(value -> addHeaders(builder, (Message) value)) .map(message -> MessageUtils.unpack(request.handler(), message) @@ -453,7 +454,7 @@ public class RequestProcessor { private Publisher value(FunctionWrapper wrapper) { Flux input = Flux.from(wrapper.argument) .map(body -> this.converter.convert(wrapper.function, body)); - if (this.inspector.isMessage(wrapper.function)) { + if (((FunctionInvocationWrapper) (Object) wrapper.function).isInputTypeMessage()) { input = messages(wrapper, wrapper.function, input); } return Mono.from(wrapper.function.apply(input));