diff --git a/.github/dco.yml b/.github/dco.yml new file mode 100644 index 000000000..0c4b142e9 --- /dev/null +++ b/.github/dco.yml @@ -0,0 +1,2 @@ +require: + members: false diff --git a/README.adoc b/README.adoc index b47e2bd96..1a4c4f276 100644 --- a/README.adoc +++ b/README.adoc @@ -31,15 +31,11 @@ tracker for issues and merging pull requests into main. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below. -[[sign-the-contributor-license-agreement]] -== Sign the Contributor License Agreement +[[developer-certificate-of-origin]] +== Developer Certificate of Origin (DCO) -Before we accept a non-trivial patch or pull request we will need you to sign the -https://cla.pivotal.io/sign/spring[Contributor License Agreement]. -Signing the contributor's agreement does not grant anyone commit rights to the main -repository, but it does mean that we can accept your contributions, and you will get an -author credit if we do. Active contributors might be asked to join the core team, and -given the ability to merge pull requests. +All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin. +For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring]. [[code-of-conduct]] == Code of Conduct @@ -219,7 +215,7 @@ Spring Cloud Build brings along the `basepom:duplicate-finder-maven-plugin`, th [[duplicate-finder-configuration]] === Duplicate Finder configuration -Duplicate finder is *enabled by default* and will run in the `verify` phase of your Maven build, but it will only take effect in your project if you add the `duplicate-finder-maven-plugin` to the `build` section of the projecst's `pom.xml`. +Duplicate finder is *enabled by default* and will run in the `verify` phase of your Maven build, but it will only take effect in your project if you add the `duplicate-finder-maven-plugin` to the `build` section of the project's `pom.xml`. .pom.xml [source,xml] @@ -276,15 +272,11 @@ tracker for issues and merging pull requests into main. If you want to contribute even something trivial please do not hesitate, but follow the guidelines below. -[[sign-the-contributor-license-agreement]] -== Sign the Contributor License Agreement +[[developer-certificate-of-origin]] +== Developer Certificate of Origin (DCO) -Before we accept a non-trivial patch or pull request we will need you to sign the -https://cla.pivotal.io/sign/spring[Contributor License Agreement]. -Signing the contributor's agreement does not grant anyone commit rights to the main -repository, but it does mean that we can accept your contributions, and you will get an -author credit if we do. Active contributors might be asked to join the core team, and -given the ability to merge pull requests. +All commits must include a __Signed-off-by__ trailer at the end of each commit message to indicate that the contributor agrees to the Developer Certificate of Origin. +For additional details, please refer to the blog post https://spring.io/blog/2025/01/06/hello-dco-goodbye-cla-simplifying-contributions-to-spring[Hello DCO, Goodbye CLA: Simplifying Contributions to Spring]. [[code-of-conduct]] == Code of Conduct @@ -464,7 +456,7 @@ Spring Cloud Build brings along the `basepom:duplicate-finder-maven-plugin`, th [[duplicate-finder-configuration]] === Duplicate Finder configuration -Duplicate finder is *enabled by default* and will run in the `verify` phase of your Maven build, but it will only take effect in your project if you add the `duplicate-finder-maven-plugin` to the `build` section of the projecst's `pom.xml`. +Duplicate finder is *enabled by default* and will run in the `verify` phase of your Maven build, but it will only take effect in your project if you add the `duplicate-finder-maven-plugin` to the `build` section of the project's `pom.xml`. .pom.xml [source,xml] diff --git a/docs/pom.xml b/docs/pom.xml index 2667f448d..87203df0b 100644 --- a/docs/pom.xml +++ b/docs/pom.xml @@ -8,7 +8,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT jar Spring Cloud Function Docs diff --git a/pom.xml b/pom.xml index d31406aa6..0a4fa7428 100644 --- a/pom.xml +++ b/pom.xml @@ -6,13 +6,13 @@ spring-cloud-function-parent Spring Cloud Function Parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT pom org.springframework.cloud spring-cloud-build - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-adapters/pom.xml b/spring-cloud-function-adapters/pom.xml index 972ac286b..fb66872a1 100644 --- a/spring-cloud-function-adapters/pom.xml +++ b/spring-cloud-function-adapters/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT spring-cloud-function-adapter-parent diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml index 040ba71a1..15e7523f4 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/pom.xml @@ -13,13 +13,13 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT UTF-8 UTF-8 - 3.11.4 + 3.14.0 1.12.29 1.0.1 1.1.5 diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSTypesMessageConverter.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSTypesMessageConverter.java index 9c5c0bd39..7077a1595 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSTypesMessageConverter.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/main/java/org/springframework/cloud/function/adapter/aws/AWSTypesMessageConverter.java @@ -17,11 +17,14 @@ package org.springframework.cloud.function.adapter.aws; import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.nio.charset.StandardCharsets; import java.util.Map; +import java.util.concurrent.atomic.AtomicReference; import com.amazonaws.services.lambda.runtime.serialization.PojoSerializer; import com.amazonaws.services.lambda.runtime.serialization.events.LambdaEventSerializers; +import com.amazonaws.services.lambda.runtime.serialization.events.serializers.S3EventSerializer; import org.springframework.cloud.function.cloudevent.CloudEventMessageUtils; import org.springframework.cloud.function.context.config.JsonMessageConverter; @@ -30,6 +33,7 @@ import org.springframework.lang.Nullable; import org.springframework.messaging.Message; import org.springframework.messaging.MessageHeaders; import org.springframework.messaging.converter.MessageConverter; +import org.springframework.util.ClassUtils; import org.springframework.util.MimeType; /** @@ -44,6 +48,9 @@ class AWSTypesMessageConverter extends JsonMessageConverter { private final JsonMapper jsonMapper; + @SuppressWarnings("rawtypes") + private final AtomicReference s3EventSerializer = new AtomicReference<>(); + AWSTypesMessageConverter(JsonMapper jsonMapper) { this(jsonMapper, new MimeType("application", "json"), new MimeType(CloudEventMessageUtils.APPLICATION_CLOUDEVENTS.getType(), CloudEventMessageUtils.APPLICATION_CLOUDEVENTS.getSubtype() + "+json")); @@ -75,7 +82,6 @@ class AWSTypesMessageConverter extends JsonMessageConverter { if (message.getPayload().getClass().isAssignableFrom(targetClass)) { return message.getPayload(); } - if (targetClass.getPackage() != null && targetClass.getPackage().getName().startsWith("com.amazonaws.services.lambda.runtime.events")) { PojoSerializer serializer = LambdaEventSerializers.serializerFor(targetClass, Thread.currentThread().getContextClassLoader()); @@ -110,12 +116,23 @@ class AWSTypesMessageConverter extends JsonMessageConverter { } + @SuppressWarnings("unchecked") @Override protected Object convertToInternal(Object payload, @Nullable MessageHeaders headers, @Nullable Object conversionHint) { if (payload instanceof String && headers.containsKey(AWSLambdaUtils.IS_BASE64_ENCODED) && (boolean) headers.get(AWSLambdaUtils.IS_BASE64_ENCODED)) { return ((String) payload).getBytes(StandardCharsets.UTF_8); } + if (payload.getClass().getName().equals("com.amazonaws.services.lambda.runtime.events.S3Event")) { + if (this.s3EventSerializer.get() == null) { + this.s3EventSerializer.set(new S3EventSerializer<>().withClassLoader(ClassUtils.getDefaultClassLoader())); + } + ByteArrayOutputStream stream = new ByteArrayOutputStream(); + this.s3EventSerializer.get().toJson(payload, stream); + return stream.toByteArray(); + } + + return jsonMapper.toJson(payload); } 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 917ca8693..0b55bc283 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 @@ -28,10 +28,14 @@ import java.util.Map; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import com.amazonaws.services.lambda.runtime.ClientContext; +import com.amazonaws.services.lambda.runtime.CognitoIdentity; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.LambdaLogger; +import com.amazonaws.services.lambda.runtime.LambdaRuntime; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; - import org.springframework.cloud.function.context.FunctionCatalog; import org.springframework.cloud.function.context.catalog.SimpleFunctionRegistry.FunctionInvocationWrapper; import org.springframework.cloud.function.context.config.RoutingFunction; @@ -130,6 +134,8 @@ public final class CustomRuntimeEventLoop implements SmartLifecycle { logger.debug("Attempting to get new event"); ResponseEntity response = this.pollForData(rest, requestEntity); + Context clientContext = generateClientContext(response.getHeaders()); + if (logger.isDebugEnabled()) { logger.debug("New Event received: " + response); } @@ -140,9 +146,9 @@ public final class CustomRuntimeEventLoop implements SmartLifecycle { FunctionInvocationWrapper function = locateFunction(environment, functionCatalog, response.getHeaders()); ByteArrayInputStream is = new ByteArrayInputStream(response.getBody().getBytes(StandardCharsets.UTF_8)); - Message requestMessage = AWSLambdaUtils.generateMessage(is, function.getInputType(), function.isSupplier(), mapper, null); - + Message requestMessage = AWSLambdaUtils.generateMessage(is, function.getInputType(), function.isSupplier(), mapper, clientContext); Object functionResponse = function.apply(requestMessage); + byte[] responseBytes = AWSLambdaUtils.generateOutputFromObject(requestMessage, functionResponse, mapper, function.getOutputType()); String invocationUrl = MessageFormat @@ -157,12 +163,91 @@ public final class CustomRuntimeEventLoop implements SmartLifecycle { } } catch (Exception e) { + e.printStackTrace(); this.propagateAwsError(requestId, e, mapper, runtimeApi, rest); } } } } + private Context generateClientContext(HttpHeaders headers) { + + Map environment = System.getenv(); + + Context context = new Context() { + + @Override + public int getRemainingTimeInMillis() { + long now = System.currentTimeMillis(); + if (!headers.containsKey("Lambda-Runtime-Deadline-Ms")) { + return 0; + } + int delta = (int) (Long.parseLong(headers.getFirst("Lambda-Runtime-Deadline-Ms")) - now); + return delta > 0 ? delta : 0; + } + + @Override + public int getMemoryLimitInMB() { + if (!environment.containsKey("AWS_LAMBDA_FUNCTION_MEMORY_SIZE")) { + return 128; + } + return Integer.parseInt(environment.getOrDefault("AWS_LAMBDA_FUNCTION_MEMORY_SIZE", "128")); + } + + @Override + public LambdaLogger getLogger() { + return LambdaRuntime.getLogger(); + } + + @Override + public String getLogStreamName() { + return environment.get("LOG_STREAM_NAME"); + } + + @Override + public String getLogGroupName() { + return environment.get("LOG_GROUP_NAME"); + } + + @Override + public String getInvokedFunctionArn() { + return headers.getFirst("Lambda-Runtime-Invoked-Function-Arn"); + } + + @Override + public CognitoIdentity getIdentity() { + return null; + } + + @Override + public String getFunctionVersion() { + return environment.get("FUNCTION_VERSION"); + } + + @Override + public String getFunctionName() { + return environment.get("FUNCTION_NAME"); + } + + @Override + public ClientContext getClientContext() { + return null; + } + + @Override + public String getAwsRequestId() { + return headers.getFirst("Lambda-Runtime-Aws-Request-Id"); + } + + public String toString() { + return "FUNCTION NAME: " + getFunctionName() + ", FUNCTION VERSION: " + getFunctionVersion() + + ", FUNCTION ARN: " + getInvokedFunctionArn() + ", FUNCTION MEM LIMIT: " + getMemoryLimitInMB() + + ", FUNCTION DEADLINE: " + getRemainingTimeInMillis(); + } + }; + return context; + } + private void propagateAwsError(String requestId, Exception e, JsonMapper mapper, String runtimeApi, RestTemplate rest) { String errorMessage = e.getMessage(); String errorType = e.getClass().getSimpleName(); diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java index f1a5dd9b9..fb1bb9de3 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-aws/src/test/java/org/springframework/cloud/function/adapter/aws/FunctionInvokerTests.java @@ -999,6 +999,18 @@ public class FunctionInvokerTests { assertThat(result).contains("s3SchemaVersion"); } + @Test + public void testS3EventAsOutput() throws Exception { + System.setProperty("MAIN_CLASS", S3Configuration.class.getName()); + System.setProperty("spring.cloud.function.definition", "outputS3Event"); + FunctionInvoker invoker = new FunctionInvoker(); + + InputStream targetStream = new ByteArrayInputStream(this.s3Event.getBytes()); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + invoker.handleRequest(targetStream, output, null); + assertThat(output.toByteArray()).isNotNull(); + } + @Test public void testS3Event() throws Exception { System.setProperty("MAIN_CLASS", S3Configuration.class.getName()); @@ -1679,6 +1691,13 @@ public class FunctionInvokerTests { @EnableAutoConfiguration @Configuration public static class S3Configuration { + + @Bean + public Function outputS3Event() { + return v -> { + return v; + }; + } @Bean public Function echoString() { return v -> v; diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/pom.xml index 4888ab266..c04bef7e2 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure-web/pom.xml @@ -9,7 +9,7 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT UTF-8 diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml index 36910303a..7085dffc4 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-azure/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/pom.xml index 13f43a1a4..17e3f3856 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-adapter-gcp/pom.xml @@ -11,7 +11,7 @@ spring-cloud-function-adapter-parent org.springframework.cloud - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/org.springframework.cloud.function.aws-lambda.packaging.gradle.plugin/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/org.springframework.cloud.function.aws-lambda.packaging.gradle.plugin/pom.xml index 544fd3b70..2fc05ce87 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/org.springframework.cloud.function.aws-lambda.packaging.gradle.plugin/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/org.springframework.cloud.function.aws-lambda.packaging.gradle.plugin/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud.function.aws-lambda.packaging spring-cloud-function-aws-gradle-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT ${basedir}/../.. diff --git a/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/spring-cloud-function-aws-packaging-gradle-plugin/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/spring-cloud-function-aws-packaging-gradle-plugin/pom.xml index 5bd9a6c39..8c376f8b8 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/spring-cloud-function-aws-packaging-gradle-plugin/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-aws-gradle-parent/spring-cloud-function-aws-packaging-gradle-plugin/pom.xml @@ -13,7 +13,7 @@ org.springframework.cloud.function.aws-lambda.packaging spring-cloud-function-aws-gradle-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml index 8c299de6b..2c4d85973 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc-cloudevent-ext/pom.xml @@ -5,7 +5,7 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT spring-cloud-function-grpc-cloudevent-ext spring-cloud-function-grpc-cloudevent-ext diff --git a/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml index 628d9a3f7..606145280 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-grpc/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.55.1 diff --git a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml index 5a9b820f4..cb74de9da 100644 --- a/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml +++ b/spring-cloud-function-adapters/spring-cloud-function-serverless-web/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-function-adapter-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT UTF-8 @@ -59,7 +59,6 @@ spring-boot-starter-tomcat - test diff --git a/spring-cloud-function-context/pom.xml b/spring-cloud-function-context/pom.xml index dd395dc28..0718852d3 100644 --- a/spring-cloud-function-context/pom.xml +++ b/spring-cloud-function-context/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT @@ -65,6 +65,10 @@ com.fasterxml.jackson.datatype jackson-datatype-jsr310 + + com.fasterxml.jackson.datatype + jackson-datatype-joda + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/MessageRoutingCallback.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/MessageRoutingCallback.java index 6f3b2a506..f9b2803ca 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/MessageRoutingCallback.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/MessageRoutingCallback.java @@ -21,21 +21,22 @@ import org.springframework.messaging.Message; /** * Java-based strategy to assist with determining the name of the route-to function definition. - * Once implementation is registered as a bean in application context + * Once an implementation is registered as a bean in application context * it will be picked up by the {@link RoutingFunction}. - * + *

* While {@link RoutingFunction} provides several mechanisms to determine the route-to function definition * this callback takes precedence over all of them. * * @author Oleg Zhurakousky + * @author John Blum * @since 3.1 */ public interface MessageRoutingCallback { /** - * Computes and returns the instance of {@link String} which encapsulates, - * at the very minimum, function definition. - *

+ * Computes and returns an instance of {@link String}, which encapsulates, + * at the very minimum, a function definition. + *

* Providing such message is primarily an optimization feature. It could be useful for cases * where routing procedure is complex and results in, let's say, conversion of the payload to * the target type, which would effectively be thrown away if the ability to modify the target 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 b4ca09b95..5c672c159 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 @@ -1,5 +1,5 @@ /* - * Copyright 2019-2022 the original author or authors. + * Copyright 2019-2025 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. @@ -63,6 +63,7 @@ import org.springframework.util.StringUtils; * * @author Oleg Zhurakousky * @author Andrey Shlykov + * @author Artem Bilan * * @since 3.0 */ @@ -382,6 +383,12 @@ public final class FunctionTypeUtils { type = FunctionContextUtils.findType(applicationContext.getBeanFactory(), beanDefinitionName); } } + else if (type instanceof ParameterizedType) { + ResolvableType resolvableType = ResolvableType.forType(type); + if (FactoryBean.class.isAssignableFrom(resolvableType.toClass())) { + return resolvableType.getGeneric(0).getType(); + } + } return type; } 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 80496d5cf..2fb21e056 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 @@ -28,6 +28,7 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.Module; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.joda.JodaModule; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.google.gson.Gson; import io.cloudevents.spring.messaging.CloudEventMessageConverter; @@ -228,7 +229,7 @@ public class ContextFunctionCatalogAutoConfiguration { mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); } - + mapper.registerModule(new JodaModule()); if (KotlinDetector.isKotlinPresent()) { try { if (!mapper.getRegisteredModuleIds().contains("com.fasterxml.jackson.module.kotlin.KotlinModule")) { 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 b15061df6..8aecd9500 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 @@ -45,10 +45,11 @@ import org.springframework.util.Assert; import org.springframework.util.StringUtils; /** - * An implementation of Function which acts as a gateway/router by actually + * An implementation of {@link Function} which acts as a gateway/router by actually * delegating incoming invocation to a function specified .. . * * @author Oleg Zhurakousky + * @author John Blum * @since 2.1 * */ @@ -127,8 +128,7 @@ public class RoutingFunction implements Function { private Object route(Object input, boolean originalInputIsPublisher) { FunctionInvocationWrapper function = null; - if (input instanceof Message) { - Message message = (Message) input; + if (input instanceof Message message) { if (this.routingCallback != null) { String functionDefinition = this.routingCallback.routingResult(message); if (StringUtils.hasText(functionDefinition)) { @@ -155,7 +155,7 @@ public class RoutingFunction implements Function { } } } - else if (input instanceof Publisher) { + else if (input instanceof Publisher publisher) { if (StringUtils.hasText(functionProperties.getDefinition())) { function = functionFromDefinition(functionProperties.getDefinition()); } @@ -163,9 +163,9 @@ public class RoutingFunction implements Function { function = this.functionFromExpression(functionProperties.getRoutingExpression(), input); } else { - return input instanceof Mono - ? Mono.from((Publisher) input).map(v -> route(v, originalInputIsPublisher)) - : Flux.from((Publisher) input).map(v -> route(v, originalInputIsPublisher)); + return input instanceof Mono mono + ? Mono.from(mono).map(v -> route(v, originalInputIsPublisher)) + : Flux.from(publisher).map(v -> route(v, originalInputIsPublisher)); } } else { @@ -184,7 +184,7 @@ public class RoutingFunction implements Function { } } - if (function.getTarget().equals(this)) { + if (this.equals(function.getTarget())) { throw new IllegalStateException("Failed to establish route, and routing to itself is not allowed as it creates a loop. Please provide: " + "'spring.cloud.function.definition' as Message header or as application property or " + "'spring.cloud.function.routing-expression' as application property."); 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 f7bc8f0b2..0897fb5e3 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 @@ -1,5 +1,5 @@ /* - * Copyright 2019-2021 the original author or authors. + * Copyright 2019-2025 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. @@ -54,6 +54,7 @@ import reactor.util.function.Tuple2; import reactor.util.function.Tuple3; import reactor.util.function.Tuples; +import org.springframework.beans.factory.FactoryBean; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.builder.SpringApplicationBuilder; @@ -85,6 +86,7 @@ import static org.junit.jupiter.api.Assertions.fail; /** * * @author Oleg Zhurakousky + * @author Artem Bilan * */ public class BeanFactoryAwareFunctionRegistryTests { @@ -895,6 +897,14 @@ public class BeanFactoryAwareFunctionRegistryTests { assertThat(result.size()).isEqualTo(3); } + @Test + void functionFromFactoryBeanIsProperlyResolved() { + FunctionCatalog catalog = configureCatalog(); + Function numberToStringFactoryBean = catalog.lookup("numberToStringFactoryBean"); + assertThat(numberToStringFactoryBean).isNotNull(); + assertThat(numberToStringFactoryBean.apply(1)).isEqualTo("1"); + } + @Test // see GH-707 public void testConcurrencyOnLookup() throws Exception { @@ -1346,6 +1356,23 @@ public class BeanFactoryAwareFunctionRegistryTests { public Consumer> reactivePojoConsumer() { return flux -> flux.subscribe(v -> consumerInputRef.set(v)); } + + @Bean + FactoryBean> numberToStringFactoryBean() { + return new FactoryBean<>() { + + @Override + public Function getObject() { + return Number::toString; + } + + @Override + public Class getObjectType() { + return Function.class; + } + + }; + } } @EnableAutoConfiguration diff --git a/spring-cloud-function-core/pom.xml b/spring-cloud-function-core/pom.xml index 4922661de..db6de4e1a 100644 --- a/spring-cloud-function-core/pom.xml +++ b/spring-cloud-function-core/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-core/src/main/java/org/springframework/cloud/function/core/FunctionInvocationHelper.java b/spring-cloud-function-core/src/main/java/org/springframework/cloud/function/core/FunctionInvocationHelper.java index ccd11c6e2..5c72fb92b 100644 --- a/spring-cloud-function-core/src/main/java/org/springframework/cloud/function/core/FunctionInvocationHelper.java +++ b/spring-cloud-function-core/src/main/java/org/springframework/cloud/function/core/FunctionInvocationHelper.java @@ -21,13 +21,22 @@ package org.springframework.cloud.function.core; /** * * @author Oleg Zhurakousky + * @author John Blum * @since 3.1 * */ public interface FunctionInvocationHelper { - default boolean isRetainOuputAsMessage(I input) { + default boolean isRetainOutputAsMessage(I input) { return true; + } + + /** + * @deprecated Use {@link #isRetainOutputAsMessage(I)} + */ + @Deprecated + default boolean isRetainOuputAsMessage(I input) { + return isRetainOutputAsMessage(input); }; default I preProcessInput(I input, Object inputConverter) { diff --git a/spring-cloud-function-dependencies/pom.xml b/spring-cloud-function-dependencies/pom.xml index 7929e6ad6..b2989f7c8 100644 --- a/spring-cloud-function-dependencies/pom.xml +++ b/spring-cloud-function-dependencies/pom.xml @@ -6,11 +6,11 @@ spring-cloud-dependencies-parent org.springframework.cloud - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT spring-cloud-function-dependencies - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT pom Spring Cloud Function Dependencies Spring Cloud Function Dependencies diff --git a/spring-cloud-function-deployer/pom.xml b/spring-cloud-function-deployer/pom.xml index 4d3c364f1..78a9aafba 100644 --- a/spring-cloud-function-deployer/pom.xml +++ b/spring-cloud-function-deployer/pom.xml @@ -10,7 +10,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-deployer/src/it/bootapp-multi/pom.xml b/spring-cloud-function-deployer/src/it/bootapp-multi/pom.xml index 4bace0dad..a0457aff7 100644 --- a/spring-cloud-function-deployer/src/it/bootapp-multi/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootapp-multi/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootapp-with-javax/pom.xml b/spring-cloud-function-deployer/src/it/bootapp-with-javax/pom.xml index e7c911ea5..97de63de5 100644 --- a/spring-cloud-function-deployer/src/it/bootapp-with-javax/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootapp-with-javax/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootapp-with-scf/pom.xml b/spring-cloud-function-deployer/src/it/bootapp-with-scf/pom.xml index 0252038b4..860d2b5da 100644 --- a/spring-cloud-function-deployer/src/it/bootapp-with-scf/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootapp-with-scf/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootapp/pom.xml b/spring-cloud-function-deployer/src/it/bootapp/pom.xml index f70265f74..8b0d6609a 100644 --- a/spring-cloud-function-deployer/src/it/bootapp/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootapp/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootjar-multi/pom.xml b/spring-cloud-function-deployer/src/it/bootjar-multi/pom.xml index 78c121ea7..c9458772b 100644 --- a/spring-cloud-function-deployer/src/it/bootjar-multi/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootjar-multi/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootjar/pom.xml b/spring-cloud-function-deployer/src/it/bootjar/pom.xml index 3dd0aeb81..a80db3c65 100644 --- a/spring-cloud-function-deployer/src/it/bootjar/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootjar/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-deployer/src/it/bootjarnostart/pom.xml b/spring-cloud-function-deployer/src/it/bootjarnostart/pom.xml index f9377fcee..b669256f7 100644 --- a/spring-cloud-function-deployer/src/it/bootjarnostart/pom.xml +++ b/spring-cloud-function-deployer/src/it/bootjarnostart/pom.xml @@ -12,13 +12,13 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-integration/pom.xml b/spring-cloud-function-integration/pom.xml index b56f997c6..baae78da8 100644 --- a/spring-cloud-function-integration/pom.xml +++ b/spring-cloud-function-integration/pom.xml @@ -12,7 +12,7 @@ spring-cloud-function-parent org.springframework.cloud - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-kotlin/pom.xml b/spring-cloud-function-kotlin/pom.xml index f5ff9c55e..3b512001d 100644 --- a/spring-cloud-function-kotlin/pom.xml +++ b/spring-cloud-function-kotlin/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-rsocket/pom.xml b/spring-cloud-function-rsocket/pom.xml index c558f3220..f5e87e606 100644 --- a/spring-cloud-function-rsocket/pom.xml +++ b/spring-cloud-function-rsocket/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-functional-sample-aws/pom.xml b/spring-cloud-function-samples/function-functional-sample-aws/pom.xml index abf51ad55..23e75e02e 100644 --- a/spring-cloud-function-samples/function-functional-sample-aws/pom.xml +++ b/spring-cloud-function-samples/function-functional-sample-aws/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -24,7 +24,7 @@ UTF-8 1.0.27.RELEASE 3.9.0 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-aws-custom-bean/pom.xml b/spring-cloud-function-samples/function-sample-aws-custom-bean/pom.xml index 5d0fd46ca..995bf0af7 100644 --- a/spring-cloud-function-samples/function-sample-aws-custom-bean/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws-custom-bean/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 io.spring.sample @@ -16,7 +16,7 @@ 1.0.27.RELEASE - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-aws-custom/pom.xml b/spring-cloud-function-samples/function-sample-aws-custom/pom.xml index 93f264272..70c392526 100644 --- a/spring-cloud-function-samples/function-sample-aws-custom/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws-custom/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 io.spring.sample @@ -16,7 +16,7 @@ 1.0.27.RELEASE - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT @@ -42,7 +42,11 @@ org.springframework.boot spring-boot-starter - + + com.amazonaws + aws-lambda-java-core + 1.1.0 + org.springframework.boot spring-boot-starter-test diff --git a/spring-cloud-function-samples/function-sample-aws-native/pom.xml b/spring-cloud-function-samples/function-sample-aws-native/pom.xml index 7f2944ed6..6aa89fa42 100644 --- a/spring-cloud-function-samples/function-sample-aws-native/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws-native/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 oz.native.sample @@ -15,7 +15,7 @@ Sample of AWS with Spring Native 19 - 2023.0.4-SNAPSHOT + 2023.0.6-SNAPSHOT @@ -47,7 +47,6 @@ com.amazonaws aws-lambda-java-core 1.1.0 - provided diff --git a/spring-cloud-function-samples/function-sample-aws-native/src/main/java/com/example/demo/NativeFunctionApplication.java b/spring-cloud-function-samples/function-sample-aws-native/src/main/java/com/example/demo/NativeFunctionApplication.java index 5c544413a..399d786db 100644 --- a/spring-cloud-function-samples/function-sample-aws-native/src/main/java/com/example/demo/NativeFunctionApplication.java +++ b/spring-cloud-function-samples/function-sample-aws-native/src/main/java/com/example/demo/NativeFunctionApplication.java @@ -7,10 +7,14 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.cloud.function.adapter.aws.AWSLambdaUtils; import org.springframework.context.annotation.Bean; // import org.springframework.cloud.function.context.DefaultMessageRoutingHandler; // import org.springframework.cloud.function.context.MessageRoutingCallback; // import org.springframework.messaging.Message; +import org.springframework.messaging.Message; + +import com.amazonaws.services.lambda.runtime.Context; @SpringBootApplication public class NativeFunctionApplication { @@ -33,10 +37,11 @@ public class NativeFunctionApplication { // } @Bean - public Function uppercase() { - return v -> { - System.out.println("Uppercasing " + v); - return v.toUpperCase(Locale.ROOT); + public Function, String> uppercase() { + return message -> { + System.out.println("AWS Context: " + message.getHeaders().get(AWSLambdaUtils.AWS_CONTEXT)); + System.out.println("Uppercasing " + message.getPayload()); + return message.getPayload().toUpperCase(Locale.ROOT); }; } diff --git a/spring-cloud-function-samples/function-sample-aws-routing/pom.xml b/spring-cloud-function-samples/function-sample-aws-routing/pom.xml index a2c9a4596..30111ba0e 100644 --- a/spring-cloud-function-samples/function-sample-aws-routing/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws-routing/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -24,7 +24,7 @@ UTF-8 1.0.27.RELEASE 2.0.2 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-aws-serverless-web-native/pom.xml b/spring-cloud-function-samples/function-sample-aws-serverless-web-native/pom.xml index 0767ab2b7..9ab0160ec 100644 --- a/spring-cloud-function-samples/function-sample-aws-serverless-web-native/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws-serverless-web-native/pom.xml @@ -6,7 +6,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 oz.native.sample @@ -16,7 +16,7 @@ Sample of AWS with Spring Native 21 - 2023.0.4-SNAPSHOT + 2023.0.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-aws/pom.xml b/spring-cloud-function-samples/function-sample-aws/pom.xml index 7dea715dd..ea2fbb729 100644 --- a/spring-cloud-function-samples/function-sample-aws/pom.xml +++ b/spring-cloud-function-samples/function-sample-aws/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -24,7 +24,7 @@ UTF-8 1.0.29.RELEASE 3.9.0 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-azure-blob-trigger/pom.xml b/spring-cloud-function-samples/function-sample-azure-blob-trigger/pom.xml index a1d9d38c0..c518527f6 100644 --- a/spring-cloud-function-samples/function-sample-azure-blob-trigger/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure-blob-trigger/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-azure-http-trigger/pom.xml b/spring-cloud-function-samples/function-sample-azure-http-trigger/pom.xml index c1848b28d..dbeb170a2 100644 --- a/spring-cloud-function-samples/function-sample-azure-http-trigger/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure-http-trigger/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-azure-kafka-trigger/pom.xml b/spring-cloud-function-samples/function-sample-azure-kafka-trigger/pom.xml index f3863218d..e0f33a40d 100644 --- a/spring-cloud-function-samples/function-sample-azure-kafka-trigger/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure-kafka-trigger/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-azure-time-trigger/pom.xml b/spring-cloud-function-samples/function-sample-azure-time-trigger/pom.xml index 29a656e35..29e01a347 100644 --- a/spring-cloud-function-samples/function-sample-azure-time-trigger/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure-time-trigger/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-azure-web/pom.xml b/spring-cloud-function-samples/function-sample-azure-web/pom.xml index 84e01a3c1..5e4f90674 100644 --- a/spring-cloud-function-samples/function-sample-azure-web/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure-web/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-azure/pom.xml b/spring-cloud-function-samples/function-sample-azure/pom.xml index 79b9ddc43..05773fee9 100644 --- a/spring-cloud-function-samples/function-sample-azure/pom.xml +++ b/spring-cloud-function-samples/function-sample-azure/pom.xml @@ -14,7 +14,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-cloudevent-rsocket/pom.xml b/spring-cloud-function-samples/function-sample-cloudevent-rsocket/pom.xml index 533ee307e..bc3009ec2 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent-rsocket/pom.xml +++ b/spring-cloud-function-samples/function-sample-cloudevent-rsocket/pom.xml @@ -11,12 +11,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/function-sample-cloudevent-sdk/pom.xml b/spring-cloud-function-samples/function-sample-cloudevent-sdk/pom.xml index f6e9d5dbe..834c7bc5b 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent-sdk/pom.xml +++ b/spring-cloud-function-samples/function-sample-cloudevent-sdk/pom.xml @@ -11,12 +11,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/function-sample-cloudevent-stream/pom.xml b/spring-cloud-function-samples/function-sample-cloudevent-stream/pom.xml index ed3dfd9eb..a4f4134b5 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent-stream/pom.xml +++ b/spring-cloud-function-samples/function-sample-cloudevent-stream/pom.xml @@ -11,12 +11,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/function-sample-cloudevent/pom.xml b/spring-cloud-function-samples/function-sample-cloudevent/pom.xml index 21d0c704d..b916c2d47 100644 --- a/spring-cloud-function-samples/function-sample-cloudevent/pom.xml +++ b/spring-cloud-function-samples/function-sample-cloudevent/pom.xml @@ -11,12 +11,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/function-sample-functional-aws-routing/pom.xml b/spring-cloud-function-samples/function-sample-functional-aws-routing/pom.xml index 230028d8b..07d1012c7 100644 --- a/spring-cloud-function-samples/function-sample-functional-aws-routing/pom.xml +++ b/spring-cloud-function-samples/function-sample-functional-aws-routing/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -24,7 +24,7 @@ UTF-8 1.0.27.RELEASE 2.0.2 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-gcp-background/pom.xml b/spring-cloud-function-samples/function-sample-gcp-background/pom.xml index 35d41d8fd..5ff2b7546 100644 --- a/spring-cloud-function-samples/function-sample-gcp-background/pom.xml +++ b/spring-cloud-function-samples/function-sample-gcp-background/pom.xml @@ -15,7 +15,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-gcp-http/pom.xml b/spring-cloud-function-samples/function-sample-gcp-http/pom.xml index bc1668676..97b41ae77 100644 --- a/spring-cloud-function-samples/function-sample-gcp-http/pom.xml +++ b/spring-cloud-function-samples/function-sample-gcp-http/pom.xml @@ -15,12 +15,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-grpc-cloudevent/pom.xml b/spring-cloud-function-samples/function-sample-grpc-cloudevent/pom.xml index b9c1bc157..3e23cde98 100644 --- a/spring-cloud-function-samples/function-sample-grpc-cloudevent/pom.xml +++ b/spring-cloud-function-samples/function-sample-grpc-cloudevent/pom.xml @@ -7,7 +7,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 com.example.grpc @@ -16,7 +16,7 @@ function-sample-grpc-cloudevent Demo project for Spring Boot - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.55.1 diff --git a/spring-cloud-function-samples/function-sample-kotlin-web/pom.xml b/spring-cloud-function-samples/function-sample-kotlin-web/pom.xml index 857418de3..d4d50ceba 100644 --- a/spring-cloud-function-samples/function-sample-kotlin-web/pom.xml +++ b/spring-cloud-function-samples/function-sample-kotlin-web/pom.xml @@ -11,7 +11,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 diff --git a/spring-cloud-function-samples/function-sample-pof/pom.xml b/spring-cloud-function-samples/function-sample-pof/pom.xml index bbc6c497c..47710a9fb 100644 --- a/spring-cloud-function-samples/function-sample-pof/pom.xml +++ b/spring-cloud-function-samples/function-sample-pof/pom.xml @@ -13,7 +13,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -21,7 +21,7 @@ UTF-8 UTF-8 3.1.2.RELEASE - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-pojo/pom.xml b/spring-cloud-function-samples/function-sample-pojo/pom.xml index 991103777..10228eece 100644 --- a/spring-cloud-function-samples/function-sample-pojo/pom.xml +++ b/spring-cloud-function-samples/function-sample-pojo/pom.xml @@ -14,12 +14,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/function-sample-spring-integration/pom.xml b/spring-cloud-function-samples/function-sample-spring-integration/pom.xml index 36e330401..d039b0824 100644 --- a/spring-cloud-function-samples/function-sample-spring-integration/pom.xml +++ b/spring-cloud-function-samples/function-sample-spring-integration/pom.xml @@ -12,7 +12,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 @@ -20,7 +20,7 @@ UTF-8 UTF-8 17 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample-supplier-exporter/pom.xml b/spring-cloud-function-samples/function-sample-supplier-exporter/pom.xml index c7b538be5..f3d0dbd03 100644 --- a/spring-cloud-function-samples/function-sample-supplier-exporter/pom.xml +++ b/spring-cloud-function-samples/function-sample-supplier-exporter/pom.xml @@ -14,12 +14,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/function-sample/pom.xml b/spring-cloud-function-samples/function-sample/pom.xml index c7c18583f..7d007403d 100644 --- a/spring-cloud-function-samples/function-sample/pom.xml +++ b/spring-cloud-function-samples/function-sample/pom.xml @@ -14,12 +14,12 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT 1.0.27.RELEASE diff --git a/spring-cloud-function-samples/pom.xml b/spring-cloud-function-samples/pom.xml index 0fb10f9aa..d7b1ac765 100644 --- a/spring-cloud-function-samples/pom.xml +++ b/spring-cloud-function-samples/pom.xml @@ -11,7 +11,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-function-samples/scf-aws-day1/pom.xml b/spring-cloud-function-samples/scf-aws-day1/pom.xml index ebb0d63a8..85799d12b 100644 --- a/spring-cloud-function-samples/scf-aws-day1/pom.xml +++ b/spring-cloud-function-samples/scf-aws-day1/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 oz.spring @@ -15,7 +15,7 @@ Template project for creating function that can be deployed as AWS Lambda 17 - 2023.0.4-SNAPSHOT + 2023.0.6-SNAPSHOT 1.0.31.RELEASE 3.9.0 1.1.0 diff --git a/spring-cloud-function-samples/scf-aws-routing/pom.xml b/spring-cloud-function-samples/scf-aws-routing/pom.xml index 6144c67f1..d6993f18a 100644 --- a/spring-cloud-function-samples/scf-aws-routing/pom.xml +++ b/spring-cloud-function-samples/scf-aws-routing/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.2.12-SNAPSHOT + 3.2.12 oz.spring @@ -15,7 +15,7 @@ Template project for creating function that can be deployed as AWS Lambda 17 - 2023.0.4-SNAPSHOT + 2023.0.6-SNAPSHOT 1.0.31.RELEASE 3.9.0 1.1.0 diff --git a/spring-cloud-function-web/pom.xml b/spring-cloud-function-web/pom.xml index 87d7b8a61..f041e77e3 100644 --- a/spring-cloud-function-web/pom.xml +++ b/spring-cloud-function-web/pom.xml @@ -12,7 +12,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT diff --git a/spring-cloud-starter-function-web/pom.xml b/spring-cloud-starter-function-web/pom.xml index c91db1633..7eb84ae89 100644 --- a/spring-cloud-starter-function-web/pom.xml +++ b/spring-cloud-starter-function-web/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT .. spring-cloud-starter-function-web diff --git a/spring-cloud-starter-function-webflux/pom.xml b/spring-cloud-starter-function-webflux/pom.xml index c5e4c29d6..4896c6a0a 100644 --- a/spring-cloud-starter-function-webflux/pom.xml +++ b/spring-cloud-starter-function-webflux/pom.xml @@ -6,7 +6,7 @@ org.springframework.cloud spring-cloud-function-parent - 4.1.4-SNAPSHOT + 4.1.6-SNAPSHOT spring-cloud-starter-function-webflux spring-cloud-starter-function-webflux