From a2dc34a160a07181dc4953f504010622c5700ce9 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Mon, 2 Dec 2019 12:03:37 +0100 Subject: [PATCH] GH-1852 Fix issue with 'output' channel - This fix addresses the issue where framework assumed the existance of 'output' channel where it is not always the case - It also addresses the binary relationship of annotation-based and functional model where you can use one or the other, meaning functions will not work with annotation-based bindings with the exception of composing to the existing output (e.g., existing legacy app) - It alos upgrades reactor to Dysprosium-SR1 Resolves #1852 --- pom.xml | 2 +- .../cloud/stream/function/FunctionConfiguration.java | 12 ++++++++---- .../GreenfieldFunctionEnableBindingTests.java | 4 ---- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/pom.xml b/pom.xml index d5c515a42..91007a925 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ 1.8 - Californium-SR11 + Dysprosium-SR1 2.1 3.0.0.RELEASE true diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index 329d71d13..0afe6fbb6 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -339,10 +339,14 @@ public class FunctionConfiguration { messageChannel = this.context.getBean(channelName, SubscribableChannel.class); } else { - // could be "input" or "output" if subscribing to existing Source - messageChannel = this.context.containsBean("input") - ? this.context.getBean("input", SubscribableChannel.class) - : this.context.getBean("output", SubscribableChannel.class); + if (this.context.containsBean("input")) { + logger.info("@EnableBinding way of defining channels is not supported by functions, so 'input' " + + "channel will not be bound to any existing function beans. You may safely ignore this " + + "message if that was not your intention otherwise, please remove @EnableBinding annotation."); + } + if (this.context.containsBean("output")) { // need this to compose to existing sources + messageChannel = this.context.getBean("output", SubscribableChannel.class); + } } return messageChannel; } diff --git a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java index 65fef8b90..640a50641 100644 --- a/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java +++ b/spring-cloud-stream/src/test/java/org/springframework/cloud/stream/function/GreenfieldFunctionEnableBindingTests.java @@ -36,8 +36,6 @@ import org.springframework.cloud.stream.binder.test.InputDestination; import org.springframework.cloud.stream.binder.test.OutputDestination; import org.springframework.cloud.stream.binder.test.TestChannelBinderConfiguration; import org.springframework.cloud.stream.converter.CompositeMessageConverterFactory; -import org.springframework.cloud.stream.messaging.Processor; -import org.springframework.cloud.stream.messaging.Sink; import org.springframework.cloud.stream.messaging.Source; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Bean; @@ -176,7 +174,6 @@ public class GreenfieldFunctionEnableBindingTests { } @EnableAutoConfiguration - @EnableBinding(Processor.class) public static class ProcessorFromFunction { @Bean @@ -187,7 +184,6 @@ public class GreenfieldFunctionEnableBindingTests { } @EnableAutoConfiguration - @EnableBinding(Sink.class) public static class SinkFromConsumer { @Bean