From 8d99e80e87e6709d3774265a86f45935961e8275 Mon Sep 17 00:00:00 2001 From: Ivan Shapoval Date: Thu, 1 Jun 2023 18:36:42 +0300 Subject: [PATCH] Fix for function auto-detection when input/output-bindings are defined --- .../stream/binding/ExplicitBindingTests.java | 22 +++++++++++++++++++ .../function/FunctionConfiguration.java | 5 +++-- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binding/ExplicitBindingTests.java b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binding/ExplicitBindingTests.java index e1dc533cd..195ea6e34 100644 --- a/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binding/ExplicitBindingTests.java +++ b/core/spring-cloud-stream-integration-tests/src/test/java/org/springframework/cloud/stream/binding/ExplicitBindingTests.java @@ -56,6 +56,28 @@ public class ExplicitBindingTests { } } + @Test + void testExplicitBindingsWithExistingFunctionalBean() { + try (ConfigurableApplicationContext context = new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration(ConsumerConfiguration.class)) + .web(WebApplicationType.NONE) + .run("--spring.jmx.enabled=false", + "--spring.cloud.stream.input-bindings=test")) { + + assertThat(context.getBean("test", MessageChannel.class)).isNotNull(); + } + + try (ConfigurableApplicationContext context = new SpringApplicationBuilder( + TestChannelBinderConfiguration.getCompleteConfiguration(ConsumerConfiguration.class)) + .web(WebApplicationType.NONE) + .run("--spring.jmx.enabled=false", + "--spring.cloud.stream.input-bindings=test;test1")) { + + assertThat(context.getBean("test", MessageChannel.class)).isNotNull(); + assertThat(context.getBean("test1", MessageChannel.class)).isNotNull(); + } + } + @Test void testExplicitBindingsWithExistingConsumer() { try (ConfigurableApplicationContext context = new SpringApplicationBuilder( diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index 8e7727ebf..c0f8f3158 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -120,6 +120,7 @@ import org.springframework.util.StringUtils; * @author Soby Chacko * @author Chris Bono * @author Byungjun You + * @author Ivan Shapoval * @since 2.1 */ @AutoConfiguration @@ -887,7 +888,7 @@ public class FunctionConfiguration { ); for (String inputBindingName : inputBindings) { FunctionInvocationWrapper sourceFunc = functionCatalog.lookup(inputBindingName); - if (sourceFunc != null && !sourceFunc.getFunctionDefinition().equals(inputBindingName) && inputBindings.length == 1) { + if (sourceFunc != null && !sourceFunc.getFunctionDefinition().equals(inputBindingName)) { sourceFunc = null; } @@ -903,7 +904,7 @@ public class FunctionConfiguration { for (String outputBindingName : outputBindings) { FunctionInvocationWrapper sourceFunc = functionCatalog.lookup(outputBindingName); - if (sourceFunc != null && !sourceFunc.getFunctionDefinition().equals(outputBindingName) && outputBindings.length == 1) { + if (sourceFunc != null && !sourceFunc.getFunctionDefinition().equals(outputBindingName)) { sourceFunc = null; }