From f121c6bd752a4d5f23a660435a816579d7d1facf Mon Sep 17 00:00:00 2001 From: akenra <37288280+akenra@users.noreply.github.com> Date: Thu, 30 Jul 2026 14:47:33 +0500 Subject: [PATCH] refactor: fix FieldMayBeFinal warnings across modules - Mark fields as final where applicable (FieldMayBeFinal inspection) - Remove unnecessary wrappedFunctionDefinitionsCacheSize field in SimpleFunctionRegistry; constructor parameter captured by anonymous class - Make wrappedFunctionDefinitionsCacheSize configurable via property spring.cloud.function.registry.cache-size (default 1000) - Rename private static final fields to UPPER_CASE convention (BREEDS, NAMES, RESULTS, WEBFLUX, ERROR_ATTRIBUTES, HEADERS) Signed-off-by: akenra <37288280+akenra@users.noreply.github.com> --- .../function/adapter/aws/AWSLambdaUtils.java | 2 +- .../adapter/aws/CustomRuntimeEventLoop.java | 4 +- .../adapter/aws/CustomRuntimeInitializer.java | 2 +- .../function/adapter/aws/FunctionInvoker.java | 2 +- .../aws/LambdaDestinationResolver.java | 2 +- .../aws/CustomRuntimeEventLoopTest.java | 2 +- .../azure/web/AzureWebProxyInvokerTests.java | 8 +- .../function/adapter/azure/web/PetData.java | 118 +++++++++--------- .../azure/web/TestExecutionContext.java | 2 +- .../azure/AzureFunctionInstanceInjector.java | 2 +- .../adapter/azure/helper/BuilderStub.java | 2 +- .../azure/helper/HttpResponseMessageStub.java | 7 +- .../azure/helper/TestExecutionContext.java | 2 +- .../function/grpc/ce/CloudEventHandler.java | 2 +- .../cloud/function/grpc/GrpcServer.java | 2 +- .../cloud/function/grpc/GrpcUtils.java | 2 +- .../function/grpc/MessageHandlingHelper.java | 2 +- .../web/ServerlessHttpServletResponse.java | 2 +- .../web/ServerlessServletContext.java | 6 +- .../web/ServerlessWebApplication.java | 8 +- .../serverless/web/RequestResponseTests.java | 2 +- .../cloud/function/test/app/PetData.java | 118 +++++++++--------- .../CloudEventsFunctionInvocationHelper.java | 2 +- .../BeanFactoryAwareFunctionRegistry.java | 7 ++ .../context/catalog/FunctionTypeUtils.java | 4 +- .../catalog/SimpleFunctionRegistry.java | 11 +- ...ntextFunctionCatalogAutoConfiguration.java | 7 +- .../ContextFunctionCatalogInitializer.java | 6 +- .../context/config/RoutingFunction.java | 2 +- .../SmartCompositeMessageConverter.java | 2 +- .../cloud/function/json/JacksonMapper.java | 2 +- .../cloud/function/json/JsonMapper.java | 2 +- .../function/utils/FunctionClassUtils.java | 2 +- .../spring-configuration-metadata.json | 6 + ...BeanFactoryAwareFunctionRegistryTests.java | 43 ++++--- ...FunctionCatalogAutoConfigurationTests.java | 4 +- ...ontextFunctionCatalogInitializerTests.java | 4 +- .../cloud/function/utils/JsonMaskerTests.java | 4 +- .../java/com/example/LambdaApplication.java | 2 +- .../java/com/example/LambdaApplication.java | 2 +- .../com/example/SampleApplicationTests.java | 2 +- .../function/web/BasicStringConverter.java | 2 +- .../function/FunctionEndpointInitializer.java | 14 +-- .../web/source/ExporterProperties.java | 6 +- .../function/web/source/HttpSupplier.java | 4 +- .../web/source/SimpleRequestBuilder.java | 2 +- .../function/web/source/SupplierExporter.java | 2 +- .../FunctionWebRequestProcessingHelper.java | 2 +- .../cloud/function/web/util/HeaderUtils.java | 4 +- .../flux/FluxRestApplicationTests.java | 2 +- .../function/mvc/MvcRestApplicationTests.java | 2 +- .../test/FunctionalExporterTests.java | 12 +- .../function/test/RestConfiguration.java | 4 +- .../function/test/RestPojoConfiguration.java | 4 +- .../web/flux/HttpGetIntegrationTests.java | 2 +- .../web/flux/HttpPostIntegrationTests.java | 2 +- .../web/mvc/HttpDeleteIntegrationTests.java | 2 +- .../web/mvc/HttpGetIntegrationTests.java | 2 +- .../web/mvc/HttpPostIntegrationTests.java | 2 +- ...tionAutoConfigurationIntegrationTests.java | 6 +- ...figurationWithRetriesIntegrationTests.java | 4 +- .../web/source/WebAppIntegrationTests.java | 6 +- 62 files changed, 260 insertions(+), 239 deletions(-) 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 2de42efdc..990b60514 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 @@ -50,7 +50,7 @@ */ public final class AWSLambdaUtils { - private static Log logger = LogFactory.getLog(AWSLambdaUtils.class); + private static final Log logger = LogFactory.getLog(AWSLambdaUtils.class); static final String AWS_API_GATEWAY = "aws-api-gateway"; 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 6a78a8fef..a5111b7e2 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 @@ -67,7 +67,7 @@ */ public final class CustomRuntimeEventLoop implements SmartLifecycle { - private static Log logger = LogFactory.getLog(CustomRuntimeEventLoop.class); + private static final Log logger = LogFactory.getLog(CustomRuntimeEventLoop.class); static final String LAMBDA_VERSION_DATE = "2018-06-01"; private static final String LAMBDA_ERROR_URL_TEMPLATE = "http://{0}/{1}/runtime/invocation/{2}/error"; @@ -84,7 +84,7 @@ public final class CustomRuntimeEventLoop implements SmartLifecycle { private volatile boolean running; - private ExecutorService executor = Executors.newSingleThreadExecutor(); + private final ExecutorService executor = Executors.newSingleThreadExecutor(); private FunctionInvocationWrapper routingFunction; diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeInitializer.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeInitializer.java index 542389300..e29f0907c 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeInitializer.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeInitializer.java @@ -31,7 +31,7 @@ */ public class CustomRuntimeInitializer implements ApplicationContextInitializer { - private static Log logger = LogFactory.getLog(CustomRuntimeInitializer.class); + private static final Log logger = LogFactory.getLog(CustomRuntimeInitializer.class); @Override public void initialize(GenericApplicationContext context) { 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 801869a19..0a03aa5f1 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 @@ -55,7 +55,7 @@ */ public class FunctionInvoker implements RequestStreamHandler { - private static Log logger = LogFactory.getLog(FunctionInvoker.class); + private static final Log logger = LogFactory.getLog(FunctionInvoker.class); private JsonMapper jsonMapper; diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/LambdaDestinationResolver.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/LambdaDestinationResolver.java index 1ef5c066c..1223b6051 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/LambdaDestinationResolver.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/LambdaDestinationResolver.java @@ -35,7 +35,7 @@ */ public class LambdaDestinationResolver implements DestinationResolver { - private static Log logger = LogFactory.getLog(LambdaDestinationResolver.class); + private static final Log logger = LogFactory.getLog(LambdaDestinationResolver.class); @Override public String destination(Supplier supplier, String name, Object value) { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoopTest.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoopTest.java index 2ec2530ae..77798a2b5 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoopTest.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/CustomRuntimeEventLoopTest.java @@ -43,7 +43,7 @@ */ public class CustomRuntimeEventLoopTest { - private String API_EVENT = "{\n" + private final String API_EVENT = "{\n" + " \"version\": \"1.0\",\n" + " \"resource\": \"$default\",\n" + " \"path\": \"/question\",\n" diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/AzureWebProxyInvokerTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/AzureWebProxyInvokerTests.java index 42b79f600..f34924657 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/AzureWebProxyInvokerTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/AzureWebProxyInvokerTests.java @@ -121,7 +121,7 @@ public Builder createResponseBuilder(HttpStatus status) { public static class BuilderStub implements Builder { private HttpStatusType status; - private Map headers = new HashMap<>(); + private final Map headers = new HashMap<>(); private Object body; @Override @@ -151,9 +151,9 @@ public HttpResponseMessage build() { public static class HttpResponseMessageStub implements HttpResponseMessage { - private HttpStatusType status; - private Map headers = new HashMap<>(); - private Object body; + private final HttpStatusType status; + private final Map headers; + private final Object body; HttpResponseMessageStub(HttpStatusType status, Map headers, Object body) { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java index dd221f394..f157522c7 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/PetData.java @@ -28,81 +28,81 @@ public final class PetData { private PetData() { } - private static List breeds = new ArrayList<>(); + private static final List BREEDS = new ArrayList<>(); static { - breeds.add("Afghan Hound"); - breeds.add("Beagle"); - breeds.add("Bernese Mountain Dog"); - breeds.add("Bloodhound"); - breeds.add("Dalmatian"); - breeds.add("Jack Russell Terrier"); - breeds.add("Norwegian Elkhound"); + BREEDS.add("Afghan Hound"); + BREEDS.add("Beagle"); + BREEDS.add("Bernese Mountain Dog"); + BREEDS.add("Bloodhound"); + BREEDS.add("Dalmatian"); + BREEDS.add("Jack Russell Terrier"); + BREEDS.add("Norwegian Elkhound"); } - private static List names = new ArrayList<>(); + private static final List NAMES = new ArrayList<>(); static { - names.add("Bailey"); - names.add("Bella"); - names.add("Max"); - names.add("Lucy"); - names.add("Charlie"); - names.add("Molly"); - names.add("Buddy"); - names.add("Daisy"); - names.add("Rocky"); - names.add("Maggie"); - names.add("Jake"); - names.add("Sophie"); - names.add("Jack"); - names.add("Sadie"); - names.add("Toby"); - names.add("Chloe"); - names.add("Cody"); - names.add("Bailey"); - names.add("Buster"); - names.add("Lola"); - names.add("Duke"); - names.add("Zoe"); - names.add("Cooper"); - names.add("Abby"); - names.add("Riley"); - names.add("Ginger"); - names.add("Harley"); - names.add("Roxy"); - names.add("Bear"); - names.add("Gracie"); - names.add("Tucker"); - names.add("Coco"); - names.add("Murphy"); - names.add("Sasha"); - names.add("Lucky"); - names.add("Lily"); - names.add("Oliver"); - names.add("Angel"); - names.add("Sam"); - names.add("Princess"); - names.add("Oscar"); - names.add("Emma"); - names.add("Teddy"); - names.add("Annie"); - names.add("Winston"); - names.add("Rosie"); + NAMES.add("Bailey"); + NAMES.add("Bella"); + NAMES.add("Max"); + NAMES.add("Lucy"); + NAMES.add("Charlie"); + NAMES.add("Molly"); + NAMES.add("Buddy"); + NAMES.add("Daisy"); + NAMES.add("Rocky"); + NAMES.add("Maggie"); + NAMES.add("Jake"); + NAMES.add("Sophie"); + NAMES.add("Jack"); + NAMES.add("Sadie"); + NAMES.add("Toby"); + NAMES.add("Chloe"); + NAMES.add("Cody"); + NAMES.add("Bailey"); + NAMES.add("Buster"); + NAMES.add("Lola"); + NAMES.add("Duke"); + NAMES.add("Zoe"); + NAMES.add("Cooper"); + NAMES.add("Abby"); + NAMES.add("Riley"); + NAMES.add("Ginger"); + NAMES.add("Harley"); + NAMES.add("Roxy"); + NAMES.add("Bear"); + NAMES.add("Gracie"); + NAMES.add("Tucker"); + NAMES.add("Coco"); + NAMES.add("Murphy"); + NAMES.add("Sasha"); + NAMES.add("Lucky"); + NAMES.add("Lily"); + NAMES.add("Oliver"); + NAMES.add("Angel"); + NAMES.add("Sam"); + NAMES.add("Princess"); + NAMES.add("Oscar"); + NAMES.add("Emma"); + NAMES.add("Teddy"); + NAMES.add("Annie"); + NAMES.add("Winston"); + NAMES.add("Rosie"); } public static List getBreeds() { - return breeds; + return BREEDS; } public static List getNames() { - return names; + return NAMES; } public static String getRandomBreed() { - return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); + return BREEDS.get(ThreadLocalRandom.current().nextInt(0, BREEDS.size() - 1)); } public static String getRandomName() { - return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); + return NAMES.get(ThreadLocalRandom.current().nextInt(0, NAMES.size() - 1)); } public static Date getRandomDoB() { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/TestExecutionContext.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/TestExecutionContext.java index 44136d3fa..95404b437 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/TestExecutionContext.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/src/test/java/org/springframework/cloud/function/adapter/azure/web/TestExecutionContext.java @@ -23,7 +23,7 @@ public class TestExecutionContext implements ExecutionContext { - private String name; + private final String name; public TestExecutionContext(String name) { this.name = name; diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureFunctionInstanceInjector.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureFunctionInstanceInjector.java index 209890652..cd2bb77ef 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureFunctionInstanceInjector.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/main/java/org/springframework/cloud/function/adapter/azure/AzureFunctionInstanceInjector.java @@ -42,7 +42,7 @@ */ public class AzureFunctionInstanceInjector implements FunctionInstanceInjector { - private static Log logger = LogFactory.getLog(AzureFunctionInstanceInjector.class); + private static final Log logger = LogFactory.getLog(AzureFunctionInstanceInjector.class); private static ConfigurableApplicationContext APPLICATION_CONTEXT; diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/BuilderStub.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/BuilderStub.java index ee22219d5..d71baef3e 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/BuilderStub.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/BuilderStub.java @@ -26,7 +26,7 @@ public class BuilderStub implements Builder { private HttpStatusType status; - private Map headers = new HashMap<>(); + private final Map headers = new HashMap<>(); private Object body; @Override diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/HttpResponseMessageStub.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/HttpResponseMessageStub.java index 3948a5c4a..253f0ab6d 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/HttpResponseMessageStub.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/HttpResponseMessageStub.java @@ -16,7 +16,6 @@ package org.springframework.cloud.function.adapter.azure.helper; -import java.util.HashMap; import java.util.Map; import com.microsoft.azure.functions.HttpResponseMessage; @@ -24,9 +23,9 @@ public class HttpResponseMessageStub implements HttpResponseMessage { - private HttpStatusType status; - private Map headers = new HashMap<>(); - private Object body; + private final HttpStatusType status; + private final Map headers; + private final Object body; public HttpResponseMessageStub(HttpStatusType status, Map headers, Object body) { diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/TestExecutionContext.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/TestExecutionContext.java index 21fd440d8..23a640a16 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/TestExecutionContext.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/src/test/java/org/springframework/cloud/function/adapter/azure/helper/TestExecutionContext.java @@ -23,7 +23,7 @@ public class TestExecutionContext implements ExecutionContext { - private String name; + private final String name; public TestExecutionContext(String name) { this.name = name; diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/src/main/java/org/springframework/cloud/function/grpc/ce/CloudEventHandler.java b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/src/main/java/org/springframework/cloud/function/grpc/ce/CloudEventHandler.java index f737a03b4..a039d0b96 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/src/main/java/org/springframework/cloud/function/grpc/ce/CloudEventHandler.java +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/src/main/java/org/springframework/cloud/function/grpc/ce/CloudEventHandler.java @@ -33,7 +33,7 @@ @SuppressWarnings("rawtypes") class CloudEventHandler extends CloudEventServiceImplBase { - private Log logger = LogFactory.getLog(CloudEventHandler.class); + private final Log logger = LogFactory.getLog(CloudEventHandler.class); private final MessageHandlingHelper helper; diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcServer.java b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcServer.java index b0ffba5af..92d30122a 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcServer.java +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcServer.java @@ -45,7 +45,7 @@ */ class GrpcServer implements SmartLifecycle, EnvironmentAware { - private Log logger = LogFactory.getLog(GrpcServer.class); + private final Log logger = LogFactory.getLog(GrpcServer.class); private final FunctionGrpcProperties grpcProperties; diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcUtils.java b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcUtils.java index c1e469b87..2fb4e3b32 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcUtils.java +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/GrpcUtils.java @@ -49,7 +49,7 @@ */ public final class GrpcUtils { - private static Log logger = LogFactory.getLog(GrpcUtils.class); + private static final Log logger = LogFactory.getLog(GrpcUtils.class); private GrpcUtils() { diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/MessageHandlingHelper.java b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/MessageHandlingHelper.java index 14ed6b59f..0e126f39e 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/MessageHandlingHelper.java +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/src/main/java/org/springframework/cloud/function/grpc/MessageHandlingHelper.java @@ -54,7 +54,7 @@ */ public class MessageHandlingHelper implements SmartLifecycle { - private Log logger = LogFactory.getLog(MessageHandlingHelper.class); + private final Log logger = LogFactory.getLog(MessageHandlingHelper.class); private final List> grpcConverters; diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessHttpServletResponse.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessHttpServletResponse.java index 041922229..47f33d459 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessHttpServletResponse.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessHttpServletResponse.java @@ -55,7 +55,7 @@ public class ServerlessHttpServletResponse implements HttpServletResponse { private static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz"; - private String defaultCharacterEncoding = WebUtils.DEFAULT_CHARACTER_ENCODING; + private final String defaultCharacterEncoding = WebUtils.DEFAULT_CHARACTER_ENCODING; private String characterEncoding = this.defaultCharacterEncoding; diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessServletContext.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessServletContext.java index 89b723047..9c2f2f3f7 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessServletContext.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessServletContext.java @@ -60,11 +60,11 @@ public class ServerlessServletContext implements ServletContext { private static final Log LOGGER = LogFactory.getLog(ServerlessServletContext.class); - private HashMap attributes = new HashMap<>(); + private final HashMap attributes = new HashMap<>(); - private Map filterRegistrations = new HashMap<>(); + private final Map filterRegistrations = new HashMap<>(); - private static Enumeration EMPTY_ENUM = Collections.enumeration(new ArrayList()); + private static final Enumeration EMPTY_ENUM = Collections.enumeration(new ArrayList()); @Override public Enumeration getInitParameterNames() { diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessWebApplication.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessWebApplication.java index 80494e3b9..b2f151d43 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessWebApplication.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/main/java/org/springframework/cloud/function/serverless/web/ServerlessWebApplication.java @@ -76,17 +76,17 @@ public class ServerlessWebApplication extends SpringApplication { private static final Log LOGGER = LogFactory.getLog(ServerlessWebApplication.class); - private ApplicationStartup applicationStartup = ApplicationStartup.DEFAULT; + private final ApplicationStartup applicationStartup = ApplicationStartup.DEFAULT; - private ApplicationContextFactory applicationContextFactory = ApplicationContextFactory.DEFAULT; + private final ApplicationContextFactory applicationContextFactory = ApplicationContextFactory.DEFAULT; private boolean allowCircularReferences; private boolean allowBeanDefinitionOverriding; - private boolean logStartupInfo = true; + private final boolean logStartupInfo = true; - private boolean lazyInitialization = false; + private final boolean lazyInitialization = false; private WebApplicationType webApplicationType; diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/serverless/web/RequestResponseTests.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/serverless/web/RequestResponseTests.java index b598724c2..2c16ac898 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/serverless/web/RequestResponseTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/serverless/web/RequestResponseTests.java @@ -44,7 +44,7 @@ */ public class RequestResponseTests { - private ObjectMapper mapper = new ObjectMapper(); + private final ObjectMapper mapper = new ObjectMapper(); private ServerlessMVC mvc; diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java index 600109a9a..2214a8be3 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/src/test/java/org/springframework/cloud/function/test/app/PetData.java @@ -25,86 +25,86 @@ import java.util.concurrent.ThreadLocalRandom; public final class PetData { - private static List breeds = new ArrayList<>(); + private static final List BREEDS = new ArrayList<>(); private PetData() { } static { - breeds.add("Afghan Hound"); - breeds.add("Beagle"); - breeds.add("Bernese Mountain Dog"); - breeds.add("Bloodhound"); - breeds.add("Dalmatian"); - breeds.add("Jack Russell Terrier"); - breeds.add("Norwegian Elkhound"); + BREEDS.add("Afghan Hound"); + BREEDS.add("Beagle"); + BREEDS.add("Bernese Mountain Dog"); + BREEDS.add("Bloodhound"); + BREEDS.add("Dalmatian"); + BREEDS.add("Jack Russell Terrier"); + BREEDS.add("Norwegian Elkhound"); } - private static List names = new ArrayList<>(); + private static final List NAMES = new ArrayList<>(); static { - names.add("Bailey"); - names.add("Bella"); - names.add("Max"); - names.add("Lucy"); - names.add("Charlie"); - names.add("Molly"); - names.add("Buddy"); - names.add("Daisy"); - names.add("Rocky"); - names.add("Maggie"); - names.add("Jake"); - names.add("Sophie"); - names.add("Jack"); - names.add("Sadie"); - names.add("Toby"); - names.add("Chloe"); - names.add("Cody"); - names.add("Bailey"); - names.add("Buster"); - names.add("Lola"); - names.add("Duke"); - names.add("Zoe"); - names.add("Cooper"); - names.add("Abby"); - names.add("Riley"); - names.add("Ginger"); - names.add("Harley"); - names.add("Roxy"); - names.add("Bear"); - names.add("Gracie"); - names.add("Tucker"); - names.add("Coco"); - names.add("Murphy"); - names.add("Sasha"); - names.add("Lucky"); - names.add("Lily"); - names.add("Oliver"); - names.add("Angel"); - names.add("Sam"); - names.add("Princess"); - names.add("Oscar"); - names.add("Emma"); - names.add("Teddy"); - names.add("Annie"); - names.add("Winston"); - names.add("Rosie"); + NAMES.add("Bailey"); + NAMES.add("Bella"); + NAMES.add("Max"); + NAMES.add("Lucy"); + NAMES.add("Charlie"); + NAMES.add("Molly"); + NAMES.add("Buddy"); + NAMES.add("Daisy"); + NAMES.add("Rocky"); + NAMES.add("Maggie"); + NAMES.add("Jake"); + NAMES.add("Sophie"); + NAMES.add("Jack"); + NAMES.add("Sadie"); + NAMES.add("Toby"); + NAMES.add("Chloe"); + NAMES.add("Cody"); + NAMES.add("Bailey"); + NAMES.add("Buster"); + NAMES.add("Lola"); + NAMES.add("Duke"); + NAMES.add("Zoe"); + NAMES.add("Cooper"); + NAMES.add("Abby"); + NAMES.add("Riley"); + NAMES.add("Ginger"); + NAMES.add("Harley"); + NAMES.add("Roxy"); + NAMES.add("Bear"); + NAMES.add("Gracie"); + NAMES.add("Tucker"); + NAMES.add("Coco"); + NAMES.add("Murphy"); + NAMES.add("Sasha"); + NAMES.add("Lucky"); + NAMES.add("Lily"); + NAMES.add("Oliver"); + NAMES.add("Angel"); + NAMES.add("Sam"); + NAMES.add("Princess"); + NAMES.add("Oscar"); + NAMES.add("Emma"); + NAMES.add("Teddy"); + NAMES.add("Annie"); + NAMES.add("Winston"); + NAMES.add("Rosie"); } public static List getBreeds() { - return breeds; + return BREEDS; } public static List getNames() { - return names; + return NAMES; } public static String getRandomBreed() { - return breeds.get(ThreadLocalRandom.current().nextInt(0, breeds.size() - 1)); + return BREEDS.get(ThreadLocalRandom.current().nextInt(0, BREEDS.size() - 1)); } public static String getRandomName() { - return names.get(ThreadLocalRandom.current().nextInt(0, names.size() - 1)); + return NAMES.get(ThreadLocalRandom.current().nextInt(0, NAMES.size() - 1)); } public static Date getRandomDoB() { diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventsFunctionInvocationHelper.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventsFunctionInvocationHelper.java index f50ae60b5..f552590e2 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventsFunctionInvocationHelper.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/cloudevent/CloudEventsFunctionInvocationHelper.java @@ -47,7 +47,7 @@ */ public class CloudEventsFunctionInvocationHelper implements FunctionInvocationHelper>, ApplicationContextAware { - private Log logger = LogFactory.getLog(this.getClass()); + private final Log logger = LogFactory.getLog(this.getClass()); private ConfigurableApplicationContext applicationContext; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index 1e5b3d2f4..10e688c80 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -62,6 +62,7 @@ * * @author Oleg Zhurakousky * @author Soby Chacko + * @author Roman Akentev */ public class BeanFactoryAwareFunctionRegistry extends SimpleFunctionRegistry implements ApplicationContextAware { @@ -74,6 +75,12 @@ public BeanFactoryAwareFunctionRegistry(ConversionService conversionService, Com super(conversionService, messageConverter, jsonMapper, functionProperties, functionInvocationHelper); } + public BeanFactoryAwareFunctionRegistry(ConversionService conversionService, CompositeMessageConverter messageConverter, + JsonMapper jsonMapper, @Nullable FunctionProperties functionProperties, @Nullable FunctionInvocationHelper> functionInvocationHelper, + int wrappedFunctionDefinitionsCacheSize) { + super(conversionService, messageConverter, jsonMapper, functionProperties, functionInvocationHelper, wrappedFunctionDefinitionsCacheSize); + } + @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.applicationContext = (GenericApplicationContext) applicationContext; 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 e170467a2..b886e1af4 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 @@ -84,9 +84,9 @@ */ public final class FunctionTypeUtils { - private static Log logger = LogFactory.getLog(FunctionTypeUtils.class); + private static final Log logger = LogFactory.getLog(FunctionTypeUtils.class); - private static Type ROUTING_FUNCTION_TYPE = discoverFunctionTypeFromClass(RoutingFunction.class); + private static final Type ROUTING_FUNCTION_TYPE = discoverFunctionTypeFromClass(RoutingFunction.class); private FunctionTypeUtils() { diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index e2ce54ae3..abdfb5dea 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -113,8 +113,6 @@ public class SimpleFunctionRegistry implements FunctionRegistry { private final FunctionProperties functionProperties; - private int wrappedFunctionDefinitionsCacheSize = 1000; - private final Object cacheLock = new Object(); @Autowired(required = false) @@ -123,6 +121,13 @@ public class SimpleFunctionRegistry implements FunctionRegistry { public SimpleFunctionRegistry(ConversionService conversionService, CompositeMessageConverter messageConverter, JsonMapper jsonMapper, @Nullable FunctionProperties functionProperties, @Nullable FunctionInvocationHelper> functionInvocationHelper) { + this(conversionService, messageConverter, jsonMapper, functionProperties, functionInvocationHelper, 1000); + } + + public SimpleFunctionRegistry(ConversionService conversionService, CompositeMessageConverter messageConverter, JsonMapper jsonMapper, + @Nullable FunctionProperties functionProperties, + @Nullable FunctionInvocationHelper> functionInvocationHelper, + int wrappedFunctionDefinitionsCacheSize) { Assert.notNull(messageConverter, "'messageConverter' must not be null"); Assert.notNull(jsonMapper, "'jsonMapper' must not be null"); this.conversionService = conversionService; @@ -448,7 +453,7 @@ public class FunctionInvocationWrapper implements Function, Cons private boolean composed; - private boolean message; + private final boolean message; private String[] expectedOutputContentType; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java index 3634e89de..08e09dd55 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java @@ -40,6 +40,7 @@ import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.BeanFactory; +import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -103,6 +104,7 @@ @AutoConfigureAfter(name = {"org.springframework.cloud.function.deployer.FunctionDeployerConfiguration"}) public class ContextFunctionCatalogAutoConfiguration { + /** * The name of the property to specify desired JSON mapper. Available values are `jackson' and 'gson'. */ @@ -113,7 +115,8 @@ public class ContextFunctionCatalogAutoConfiguration { @Bean public FunctionRegistry functionCatalog(List messageConverters, JsonMapper jsonMapper, ConfigurableApplicationContext context, @Nullable FunctionInvocationHelper> functionInvocationHelper, - FunctionProperties functionProperties) { + FunctionProperties functionProperties, + @Value("${spring.cloud.function.registry.cache-size:1000}") int wrappedFunctionDefinitionsCacheSize) { ConversionService existing = context.getBeanFactory().getConversionService(); ConfigurableConversionService conversionService = (existing instanceof ConfigurableConversionService ccs) ? ccs @@ -163,7 +166,7 @@ public FunctionRegistry functionCatalog(List messageConverters if (functionInvocationHelper instanceof CloudEventsFunctionInvocationHelper cloudEventsFunctionInvocationHelper) { cloudEventsFunctionInvocationHelper.setMessageConverter(messageConverter); } - return new BeanFactoryAwareFunctionRegistry(conversionService, messageConverter, jsonMapper, functionProperties, functionInvocationHelper); + return new BeanFactoryAwareFunctionRegistry(conversionService, messageConverter, jsonMapper, functionProperties, functionInvocationHelper, wrappedFunctionDefinitionsCacheSize); } @SuppressWarnings({ "unchecked", "rawtypes" }) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializer.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializer.java index e3de40732..d996ffcb6 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializer.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializer.java @@ -61,6 +61,7 @@ /** * @author Dave Syer * @author Oleg Zhurakousky + * @author Roman Akentev * */ public class ContextFunctionCatalogInitializer implements ApplicationContextInitializer { @@ -86,7 +87,7 @@ public void initialize(GenericApplicationContext applicationContext) { static class ContextFunctionCatalogBeanRegistrar implements BeanDefinitionRegistryPostProcessor { - private GenericApplicationContext context; + private final GenericApplicationContext context; ContextFunctionCatalogBeanRegistrar(GenericApplicationContext applicationContext) { this.context = applicationContext; @@ -181,7 +182,8 @@ && new ClassPathResource(basePackage.replace(".", "/")).exists()) { SmartCompositeMessageConverter messageConverter = new SmartCompositeMessageConverter(messageConverters); ConversionService conversionService = new DefaultConversionService(); - return new SimpleFunctionRegistry(conversionService, messageConverter, this.context.getBean(JsonMapper.class)); + int cacheSize = this.context.getEnvironment().getProperty("spring.cloud.function.registry.cache-size", int.class, 1000); + return new SimpleFunctionRegistry(conversionService, messageConverter, this.context.getBean(JsonMapper.class), null, null, cacheSize); }); this.context.registerBean(FunctionProperties.class, () -> new FunctionProperties()); this.context.registerBean(FunctionRegistrationPostProcessor.class, diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java index c6c4422e1..4d7290cb4 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/RoutingFunction.java @@ -66,7 +66,7 @@ public class RoutingFunction implements Function { */ public static final String DEFAULT_ROUTE_HANDLER = "defaultMessageRoutingHandler"; - private static Log logger = LogFactory.getLog(RoutingFunction.class); + private static final Log logger = LogFactory.getLog(RoutingFunction.class); private final StandardEvaluationContext evalContext = new StandardEvaluationContext(); diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java index 7aa2266fe..bbf9fb351 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/SmartCompositeMessageConverter.java @@ -49,7 +49,7 @@ */ public class SmartCompositeMessageConverter extends CompositeMessageConverter { - private Log logger = LogFactory.getLog(this.getClass()); + private final Log logger = LogFactory.getLog(this.getClass()); private final Supplier> messageConverterHelpersSupplier; diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JacksonMapper.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JacksonMapper.java index eac1bbf0f..a36fc456a 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JacksonMapper.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/json/JacksonMapper.java @@ -35,7 +35,7 @@ */ public class JacksonMapper extends JsonMapper { - private static Log logger = LogFactory.getLog(JacksonMapper.class); + private static final Log logger = LogFactory.getLog(JacksonMapper.class); private final ObjectMapper mapper; 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 8fc9eaa97..7b9552f46 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 @@ -42,7 +42,7 @@ */ public abstract class JsonMapper { - private static Log logger = LogFactory.getLog(JsonMapper.class); + private static final Log logger = LogFactory.getLog(JsonMapper.class); // we need this just to validate is String is JSON private static final ObjectMapper mapper = tools.jackson.databind.json.JsonMapper.builder() diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/utils/FunctionClassUtils.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/utils/FunctionClassUtils.java index 023129999..b12f49423 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/utils/FunctionClassUtils.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/utils/FunctionClassUtils.java @@ -44,7 +44,7 @@ */ public final class FunctionClassUtils { - private static Log logger = LogFactory.getLog(FunctionClassUtils.class); + private static final Log logger = LogFactory.getLog(FunctionClassUtils.class); private FunctionClassUtils() { diff --git a/spring-cloud-function-context/src/main/resources/META-INF/spring-configuration-metadata.json b/spring-cloud-function-context/src/main/resources/META-INF/spring-configuration-metadata.json index 393e8b5b2..8a80564f2 100644 --- a/spring-cloud-function-context/src/main/resources/META-INF/spring-configuration-metadata.json +++ b/spring-cloud-function-context/src/main/resources/META-INF/spring-configuration-metadata.json @@ -25,6 +25,12 @@ "type": "java.lang.Boolean", "description": "Enables RoutingFunction which delegates incoming request to a function named via function.name header", "defaultValue": false + }, + { + "name": "spring.cloud.function.registry.cache-size", + "type": "java.lang.Integer", + "description": "Maximum number of wrapped function definitions kept in the registry cache. When the cache exceeds this size, the eldest entries are removed.", + "defaultValue": 1000 } ] } diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java index c0bff4df9..aea8edafa 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistryTests.java @@ -88,6 +88,7 @@ * * @author Oleg Zhurakousky * @author Artem Bilan + * @author Roman Akentev * */ public class BeanFactoryAwareFunctionRegistryTests { @@ -119,11 +120,9 @@ public void before() { @Test public void testBoundedFunctionCache() throws Exception { - FunctionCatalog catalog = this.configureCatalog(CompositionWithNullReturnInBetween.class); - Field wrappedFunctionDefinitionsCacheSizeField = ReflectionUtils.findField(catalog.getClass(), - "wrappedFunctionDefinitionsCacheSize"); - wrappedFunctionDefinitionsCacheSizeField.setAccessible(true); - wrappedFunctionDefinitionsCacheSizeField.set(catalog, 10); + FunctionCatalog catalog = this.configureCatalogWithProperties( + new String[] { "--spring.cloud.function.registry.cache-size=10" }, + CompositionWithNullReturnInBetween.class); Field wrappedFunctionDefinitionsField = ReflectionUtils.findField(catalog.getClass(), "wrappedFunctionDefinitions"); wrappedFunctionDefinitionsField.setAccessible(true); @@ -183,30 +182,30 @@ public void testCompositionReactiveSupplierWithImplicitConsumer() throws Excepti FunctionCatalog catalog = this.configureCatalog(CompositionReactiveSupplierWithConsumer.class); FunctionInvocationWrapper function = catalog.lookup("supplyPrimitive|consume"); function.apply(null); - assertThat(CompositionReactiveSupplierWithConsumer.results.size()).isEqualTo(2); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(0)).isEqualTo(1); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(1)).isEqualTo(2); - CompositionReactiveSupplierWithConsumer.results.clear(); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.size()).isEqualTo(2); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(0)).isEqualTo(1); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(1)).isEqualTo(2); + CompositionReactiveSupplierWithConsumer.RESULTS.clear(); function = catalog.lookup("supplyMessage|consume"); function.apply(null); - assertThat(CompositionReactiveSupplierWithConsumer.results.size()).isEqualTo(2); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(0)).isEqualTo(1); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(1)).isEqualTo(2); - CompositionReactiveSupplierWithConsumer.results.clear(); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.size()).isEqualTo(2); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(0)).isEqualTo(1); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(1)).isEqualTo(2); + CompositionReactiveSupplierWithConsumer.RESULTS.clear(); function = catalog.lookup("functionMessage|consume"); function.apply(Flux.fromArray(new Message[] {MessageBuilder.withPayload("ricky").build(), MessageBuilder.withPayload("bubbles").build()})); - assertThat(CompositionReactiveSupplierWithConsumer.results.size()).isEqualTo(2); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(0)).isEqualTo("RICKY"); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(1)).isEqualTo("BUBBLES"); - CompositionReactiveSupplierWithConsumer.results.clear(); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.size()).isEqualTo(2); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(0)).isEqualTo("RICKY"); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(1)).isEqualTo("BUBBLES"); + CompositionReactiveSupplierWithConsumer.RESULTS.clear(); function = catalog.lookup("functionPrimitive|consume"); function.apply(Flux.fromArray(new String[] {"ricky", "bubbles"})); - assertThat(CompositionReactiveSupplierWithConsumer.results.size()).isEqualTo(2); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(0)).isEqualTo("RICKY"); - assertThat(CompositionReactiveSupplierWithConsumer.results.get(1)).isEqualTo("BUBBLES"); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.size()).isEqualTo(2); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(0)).isEqualTo("RICKY"); + assertThat(CompositionReactiveSupplierWithConsumer.RESULTS.get(1)).isEqualTo("BUBBLES"); } @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -1649,7 +1648,7 @@ public Function echo2() { @Configuration // s-c-f-1141 @SuppressWarnings({"unchecked", "rawtypes"}) public static class CompositionReactiveSupplierWithConsumer { - private static List results = new ArrayList<>(); + private static final List RESULTS = new ArrayList<>(); @Bean public Function, Flux> functionPrimitive() { @@ -1683,7 +1682,7 @@ public Consumer consume() { if (v instanceof Message vMessage) { v = vMessage.getPayload(); } - results.add(v); + RESULTS.add(v); }; } } 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 b46b565af..47163e5b5 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 @@ -469,7 +469,7 @@ protected static class EmptyConfiguration { @Configuration protected static class SimpleConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @Bean public Function function() { @@ -522,7 +522,7 @@ public BeanFactoryPostProcessor someBeanFactoryPostProcessor(Environment environ @Component("appendFunction") public static class AppendFunction implements Function { - private String value; + private final String value; public AppendFunction(String value) { this.value = value; diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializerTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializerTests.java index 5e6d88aec..1082d84e5 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializerTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogInitializerTests.java @@ -243,7 +243,7 @@ public Function function() { protected static class SimpleConfiguration implements ApplicationContextInitializer { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @Override @@ -331,7 +331,7 @@ public Function function() { protected static class GsonConfiguration implements ApplicationContextInitializer { - private Gson gson = new Gson(); + private final Gson gson = new Gson(); @Override public void initialize(GenericApplicationContext context) { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/utils/JsonMaskerTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/utils/JsonMaskerTests.java index a72b0bb24..76f931547 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/utils/JsonMaskerTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/utils/JsonMaskerTests.java @@ -39,7 +39,7 @@ public class JsonMaskerTests { - private String event = "{\n" + private final String event = "{\n" + " \"Records\": [\n" + " {\n" + " \"eventID\": \"f07f8ca4b0b26cb9c4e5e77e69f274ee\",\n" @@ -192,7 +192,7 @@ public class JsonMaskerTests { + " ]\n" + "}"; - private List maskedKeys = new ArrayList<>(); + private final List maskedKeys = new ArrayList<>(); @Test public void validateMasking() throws Exception { diff --git a/spring-cloud-function-samples/function-sample-aws-custom-bean/src/main/java/com/example/LambdaApplication.java b/spring-cloud-function-samples/function-sample-aws-custom-bean/src/main/java/com/example/LambdaApplication.java index da84c1287..a321e8946 100644 --- a/spring-cloud-function-samples/function-sample-aws-custom-bean/src/main/java/com/example/LambdaApplication.java +++ b/spring-cloud-function-samples/function-sample-aws-custom-bean/src/main/java/com/example/LambdaApplication.java @@ -18,7 +18,7 @@ @SpringBootApplication public class LambdaApplication { - private static Log logger = LogFactory.getLog(LambdaApplication.class); + private static final Log logger = LogFactory.getLog(LambdaApplication.class); @Bean public Consumer consume() { diff --git a/spring-cloud-function-samples/function-sample-aws-custom/src/main/java/com/example/LambdaApplication.java b/spring-cloud-function-samples/function-sample-aws-custom/src/main/java/com/example/LambdaApplication.java index 289ba7807..5a25e8fb8 100644 --- a/spring-cloud-function-samples/function-sample-aws-custom/src/main/java/com/example/LambdaApplication.java +++ b/spring-cloud-function-samples/function-sample-aws-custom/src/main/java/com/example/LambdaApplication.java @@ -17,7 +17,7 @@ public class LambdaApplication implements ApplicationContextInitializer { - private static Log logger = LogFactory.getLog(LambdaApplication.class); + private static final Log logger = LogFactory.getLog(LambdaApplication.class); public Function uppercase() { return value -> { diff --git a/spring-cloud-function-samples/function-sample-pojo/src/test/java/com/example/SampleApplicationTests.java b/spring-cloud-function-samples/function-sample-pojo/src/test/java/com/example/SampleApplicationTests.java index 6a02200a4..77c2c8739 100644 --- a/spring-cloud-function-samples/function-sample-pojo/src/test/java/com/example/SampleApplicationTests.java +++ b/spring-cloud-function-samples/function-sample-pojo/src/test/java/com/example/SampleApplicationTests.java @@ -49,7 +49,7 @@ public class SampleApplicationTests { @LocalServerPort private int port; - private TestRestTemplate rest = new TestRestTemplate(); + private final TestRestTemplate rest = new TestRestTemplate(); @BeforeEach public void before() { diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/BasicStringConverter.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/BasicStringConverter.java index 50eed3d7e..68b1fbff4 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/BasicStringConverter.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/BasicStringConverter.java @@ -31,7 +31,7 @@ public class BasicStringConverter implements StringConverter { private ConversionService conversionService; - private ConfigurableListableBeanFactory registry; + private final ConfigurableListableBeanFactory registry; public BasicStringConverter(ConfigurableListableBeanFactory registry) { this.registry = registry; diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java index 69e754ca8..ee55a1b0a 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/function/FunctionEndpointInitializer.java @@ -79,15 +79,15 @@ */ public class FunctionEndpointInitializer implements ApplicationContextInitializer { - private static boolean webflux = ClassUtils + private static final boolean WEBFLUX = ClassUtils .isPresent("org.springframework.web.reactive.function.server.RouterFunction", null); - private static boolean errorAttributes = ClassUtils + private static final boolean ERROR_ATTRIBUTES = ClassUtils .isPresent("org.springframework.boot.webflux.error.ErrorAttributes", null); @Override public void initialize(GenericApplicationContext context) { - if (webflux && ContextFunctionCatalogInitializer.enabled + if (WEBFLUX && ContextFunctionCatalogInitializer.enabled && context.getEnvironment().getProperty(FunctionalSpringApplication.SPRING_WEB_APPLICATION_TYPE, WebApplicationType.class, WebApplicationType.REACTIVE) == WebApplicationType.REACTIVE && context.getEnvironment().getProperty("spring.functional.enabled", Boolean.class, false)) { @@ -97,7 +97,7 @@ public void initialize(GenericApplicationContext context) { } private void registerWebFluxAutoConfiguration(GenericApplicationContext context) { - if (errorAttributes) { + if (ERROR_ATTRIBUTES) { context.registerBean(DefaultErrorWebExceptionHandler.class, () -> ErrorHandlerRegistrar.errorHandler(context)); } context.registerBean(WebHttpHandlerBuilder.WEB_HANDLER_BEAN_NAME, HttpWebHandlerAdapter.class, @@ -132,9 +132,9 @@ private static void register(GenericApplicationContext context) { private static class ServerListener implements SmartApplicationListener { - private static Log logger = LogFactory.getLog(ServerListener.class); + private static final Log logger = LogFactory.getLog(ServerListener.class); - private GenericApplicationContext context; + private final GenericApplicationContext context; ServerListener(GenericApplicationContext context) { this.context = context; @@ -190,7 +190,7 @@ public boolean supportsEventType(Class eventType) { class FunctionEndpointFactory { - private static Log logger = LogFactory.getLog(FunctionEndpointFactory.class); + private static final Log logger = LogFactory.getLog(FunctionEndpointFactory.class); private final FunctionCatalog functionCatalog; diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java index 48e61cc7e..31d1efa56 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/ExporterProperties.java @@ -43,12 +43,12 @@ public class ExporterProperties { /** * Properties related to a source of items (via an HTTP GET on startup). */ - private Source source = new Source(); + private final Source source = new Source(); /** * Properties related to a sink of items (via an HTTP POST on startup). */ - private Sink sink = new Sink(); + private final Sink sink = new Sink(); /** * Flag to enable the export of a supplier. @@ -143,7 +143,7 @@ public static class Sink { /** * Additional headers to append to the outgoing HTTP requests. */ - private Map headers = new LinkedHashMap<>(); + private final Map headers = new LinkedHashMap<>(); /** * The name of a specific existing Supplier to export from the function catalog. diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/HttpSupplier.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/HttpSupplier.java index 6e5376040..8bb3e8d65 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/HttpSupplier.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/HttpSupplier.java @@ -41,9 +41,9 @@ */ public class HttpSupplier implements Supplier> { - private static Log logger = LogFactory.getLog(HttpSupplier.class); + private static final Log logger = LogFactory.getLog(HttpSupplier.class); - private WebClient client; + private final WebClient client; private final ExporterProperties props; diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SimpleRequestBuilder.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SimpleRequestBuilder.java index 8153940ed..63918d558 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SimpleRequestBuilder.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SimpleRequestBuilder.java @@ -38,7 +38,7 @@ class SimpleRequestBuilder implements RequestBuilder { private String baseUrl = "http://${destination}"; - private Map headers = new LinkedHashMap<>(); + private final Map headers = new LinkedHashMap<>(); private final Environment environment; diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java index b0feaaa2a..0a0338f45 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/source/SupplierExporter.java @@ -47,7 +47,7 @@ */ public class SupplierExporter implements SmartLifecycle { - private static Log logger = LogFactory.getLog(SupplierExporter.class); + private static final Log logger = LogFactory.getLog(SupplierExporter.class); private final FunctionCatalog catalog; diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebRequestProcessingHelper.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebRequestProcessingHelper.java index 533c589b0..cb4f95003 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebRequestProcessingHelper.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/FunctionWebRequestProcessingHelper.java @@ -51,7 +51,7 @@ */ public final class FunctionWebRequestProcessingHelper { - private static Log logger = LogFactory.getLog(FunctionWebRequestProcessingHelper.class); + private static final Log logger = LogFactory.getLog(FunctionWebRequestProcessingHelper.class); private FunctionWebRequestProcessingHelper() { diff --git a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/HeaderUtils.java b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/HeaderUtils.java index 6391ee7cb..93bfcf2d2 100644 --- a/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/HeaderUtils.java +++ b/spring-cloud-function-web/src/main/java/org/springframework/cloud/function/web/util/HeaderUtils.java @@ -38,9 +38,9 @@ public final class HeaderUtils { */ public static final String HTTP_REQUEST_PARAM = "http_request_param"; - private static HttpHeaders IGNORED = new HttpHeaders(); + private static final HttpHeaders IGNORED = new HttpHeaders(); - private static HttpHeaders REQUEST_ONLY = new HttpHeaders(); + private static final HttpHeaders REQUEST_ONLY = new HttpHeaders(); static { IGNORED.add(MessageHeaders.ID, ""); diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/flux/FluxRestApplicationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/flux/FluxRestApplicationTests.java index 5bdb4838e..3bb83a0f5 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/flux/FluxRestApplicationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/flux/FluxRestApplicationTests.java @@ -298,7 +298,7 @@ private String sse(String... values) { @Configuration public static class TestConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @PostMapping({ "/uppercase", "/transform", "/post/more" }) public Flux uppercase(@RequestBody List flux) { diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/mvc/MvcRestApplicationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/mvc/MvcRestApplicationTests.java index 0621a5152..8ffb08f83 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/mvc/MvcRestApplicationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/mvc/MvcRestApplicationTests.java @@ -287,7 +287,7 @@ private String sse(String... values) { @Configuration public static class TestConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); @PostMapping({ "/uppercase", "/transform", "/post/more" }) public Flux uppercase(@RequestBody List flux) { diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/FunctionalExporterTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/FunctionalExporterTests.java index b04b5f7b0..3fc20964e 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/FunctionalExporterTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/FunctionalExporterTests.java @@ -68,11 +68,11 @@ public class FunctionalExporterTests { private static ConfigurableApplicationContext context; - private static Map headers = new HashMap<>(); + private static final Map HEADERS = new HashMap<>(); @BeforeAll public static void init() throws Exception { - headers.clear(); + HEADERS.clear(); String port = "" + TestSocketUtils.findAvailableTcpPort(); System.setProperty("server.port", port); System.setProperty("my.port", port); @@ -85,7 +85,7 @@ public static void init() throws Exception { @AfterAll public static void close() { - headers.clear(); + HEADERS.clear(); System.clearProperty("server.port"); if (context != null) { context.close(); @@ -101,8 +101,8 @@ public void words() throws Exception { // It completed assertThat(FunctionalExporterTests.app.inputs).contains("HELLO"); assertThat(this.forwarder.isOk()).isTrue(); - assertThat(headers.containsKey("scf-sink-url")); - assertThat(headers.containsKey("scf-func-name")); + assertThat(HEADERS.containsKey("scf-sink-url")); + assertThat(HEADERS.containsKey("scf-func-name")); } @SpringBootConfiguration @@ -111,7 +111,7 @@ protected static class ApplicationConfiguration Function, Message> uppercase() { return value -> { - headers.putAll(value.getHeaders()); + HEADERS.putAll(value.getHeaders()); return MessageBuilder.withPayload(value.getPayload().getName().toUpperCase(Locale.ROOT)) .copyHeaders(value.getHeaders()).build(); }; diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestConfiguration.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestConfiguration.java index 1d261fead..0835e4372 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestConfiguration.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestConfiguration.java @@ -38,11 +38,11 @@ @RestController public class RestConfiguration { - private static Log logger = LogFactory.getLog(RestConfiguration.class); + private static final Log logger = LogFactory.getLog(RestConfiguration.class); List inputs = new ArrayList<>(); - private Iterator outputs = Arrays.asList("hello", "world").iterator(); + private final Iterator outputs = Arrays.asList("hello", "world").iterator(); @GetMapping("/") ResponseEntity home() { diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestPojoConfiguration.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestPojoConfiguration.java index 0a3e3902e..d4b588b83 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestPojoConfiguration.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/test/RestPojoConfiguration.java @@ -38,11 +38,11 @@ @RestController public class RestPojoConfiguration { - private static Log logger = LogFactory.getLog(RestPojoConfiguration.class); + private static final Log logger = LogFactory.getLog(RestPojoConfiguration.class); List inputs = new ArrayList<>(); - private Iterator outputs = Arrays.asList("{\"name\":\"hello\"}").iterator(); + private final Iterator outputs = Arrays.asList("{\"name\":\"hello\"}").iterator(); @GetMapping("/") ResponseEntity home() { diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java index c2afd53bd..ef327c37f 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpGetIntegrationTests.java @@ -260,7 +260,7 @@ private String sse(String... values) { @TestConfiguration public static class ApplicationConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static void main(String[] args) throws Exception { SpringApplication.run(HttpGetIntegrationTests.ApplicationConfiguration.class, diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java index 764693733..72ac0408d 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/flux/HttpPostIntegrationTests.java @@ -411,7 +411,7 @@ private String sse(String... values) { @Configuration(proxyBeanMethods = false) public static class ApplicationConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); private static int functionReactiveInvocations; diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpDeleteIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpDeleteIntegrationTests.java index e4abbbaee..6da86e6f5 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpDeleteIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpDeleteIntegrationTests.java @@ -97,7 +97,7 @@ public void testDeleteWithFunction() throws Exception { @TestConfiguration public static class ApplicationConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static void main(String[] args) throws Exception { SpringApplication.run(HttpDeleteIntegrationTests.ApplicationConfiguration.class, diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java index 367a0770c..40a337cd0 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpGetIntegrationTests.java @@ -274,7 +274,7 @@ private String sse(String... values) { @TestConfiguration public static class ApplicationConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static void main(String[] args) throws Exception { SpringApplication.run(HttpGetIntegrationTests.ApplicationConfiguration.class, diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpPostIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpPostIntegrationTests.java index 9490a8f34..29a0fa976 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpPostIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/mvc/HttpPostIntegrationTests.java @@ -341,7 +341,7 @@ private String sse(String... values) { @TestConfiguration public static class ApplicationConfiguration { - private List list = new ArrayList<>(); + private final List list = new ArrayList<>(); public static void main(String[] args) throws Exception { SpringApplication.run(HttpPostIntegrationTests.ApplicationConfiguration.class, diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationIntegrationTests.java index 084d58b90..82e3b863c 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationIntegrationTests.java @@ -104,11 +104,11 @@ public Function uppercase() { @RestController public static class RestConfiguration { - private static Log logger = LogFactory.getLog(RestConfiguration.class); + private static final Log logger = LogFactory.getLog(RestConfiguration.class); - private List inputs = new ArrayList<>(); + private final List inputs = new ArrayList<>(); - private Iterator outputs = Arrays.asList("hello", "world").iterator(); + private final Iterator outputs = Arrays.asList("hello", "world").iterator(); @GetMapping("/") ResponseEntity home() { diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationWithRetriesIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationWithRetriesIntegrationTests.java index b01e21312..4d7045cdc 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationWithRetriesIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/FunctionAutoConfigurationWithRetriesIntegrationTests.java @@ -109,9 +109,9 @@ public static class RestConfiguration { @Autowired private SupplierExporter forwarder; - private static Log logger = LogFactory.getLog(RestConfiguration.class); + private static final Log logger = LogFactory.getLog(RestConfiguration.class); - private List inputs = new ArrayList<>(); + private final List inputs = new ArrayList<>(); private int counter; diff --git a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/WebAppIntegrationTests.java b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/WebAppIntegrationTests.java index 896cffad5..15ba86af3 100644 --- a/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/WebAppIntegrationTests.java +++ b/spring-cloud-function-web/src/test/java/org/springframework/cloud/function/web/source/WebAppIntegrationTests.java @@ -56,7 +56,7 @@ "spring.cloud.function.web.export.autoStartup=false" }) public class WebAppIntegrationTests { - private static Log logger = LogFactory.getLog(WebAppIntegrationTests.class); + private static final Log logger = LogFactory.getLog(WebAppIntegrationTests.class); @Autowired private SupplierExporter forwarder; @@ -87,9 +87,9 @@ public void posts() throws Exception { @RestController public static class ApplicationConfiguration { - private List values = new ArrayList<>(); + private final List values = new ArrayList<>(); - private CountDownLatch latch = new CountDownLatch(1); + private final CountDownLatch latch = new CountDownLatch(1); @Bean public Supplier word() {