diff --git a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/BindableFunctionProxyFactory.java b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/BindableFunctionProxyFactory.java index 2e75bf079..9f7f3c023 100644 --- a/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/BindableFunctionProxyFactory.java +++ b/core/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/BindableFunctionProxyFactory.java @@ -58,20 +58,31 @@ public class BindableFunctionProxyFactory extends BindableProxyFactory implement private final SupportedBindableFeatures supportedBindableFeatures; + private final boolean functionExist; + private GenericApplicationContext context; BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties) { - this(functionDefinition, inputCount, outputCount, functionProperties, new SupportedBindableFeatures()); + this(functionDefinition, inputCount, outputCount, functionProperties, new SupportedBindableFeatures(), true); + } + + BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties, boolean functionExist) { + this(functionDefinition, inputCount, outputCount, functionProperties, new SupportedBindableFeatures(), functionExist); + } + + BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties, SupportedBindableFeatures supportedBindableFeatures) { + this(functionDefinition, inputCount, outputCount, functionProperties, supportedBindableFeatures, true); } BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties, - SupportedBindableFeatures supportedBindableFeatures) { + SupportedBindableFeatures supportedBindableFeatures, boolean functionExist) { super(null); this.inputCount = inputCount; this.outputCount = outputCount; this.functionDefinition = functionDefinition; this.functionProperties = functionProperties; this.supportedBindableFeatures = supportedBindableFeatures; + this.functionExist = functionExist; } @Override @@ -104,7 +115,7 @@ public class BindableFunctionProxyFactory extends BindableProxyFactory implement } protected String getFunctionDefinition() { - return this.functionDefinition; + return this.isFunctionExist() ? this.functionDefinition : null; } protected String getInputName(int index) { @@ -188,4 +199,8 @@ public class BindableFunctionProxyFactory extends BindableProxyFactory implement public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { this.context = (GenericApplicationContext) applicationContext; } + + public boolean isFunctionExist() { + return functionExist; + } } 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 56685e688..bfb624708 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 @@ -436,9 +436,9 @@ public class FunctionConfiguration { Map beansOfType = applicationContext.getBeansOfType(BindableProxyFactory.class); this.bindableProxyFactories = beansOfType.values().toArray(new BindableProxyFactory[0]); for (BindableProxyFactory bindableProxyFactory : this.bindableProxyFactories) { - String functionDefinition = bindableProxyFactory instanceof BindableFunctionProxyFactory + String functionDefinition = bindableProxyFactory instanceof BindableFunctionProxyFactory && ((BindableFunctionProxyFactory) bindableProxyFactory).isFunctionExist() ? ((BindableFunctionProxyFactory) bindableProxyFactory).getFunctionDefinition() - : this.functionProperties.getDefinition(); + : null; /*this.functionProperties.getDefinition();*/ boolean shouldNotProcess = false; if (!(bindableProxyFactory instanceof BindableFunctionProxyFactory)) { @@ -898,7 +898,7 @@ public class FunctionConfiguration { sourceFunc.isConsumer() || (!sourceFunc.getFunctionDefinition().equals(outputBindingName) && applicationContext.containsBean(outputBindingName))) { - BindableFunctionProxyFactory proxyFactory = new BindableFunctionProxyFactory(outputBindingName, 0, 1, this.streamFunctionProperties); + BindableFunctionProxyFactory proxyFactory = new BindableFunctionProxyFactory(outputBindingName, 0, 1, this.streamFunctionProperties, sourceFunc != null); ((GenericApplicationContext) this.applicationContext).registerBean(outputBindingName + "_binding_out", BindableFunctionProxyFactory.class, () -> proxyFactory); }