GH-2624 Ensure BindableFunctionProxyFactory is aware of no-corresponding-function bindings
Resolves #2624
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -436,9 +436,9 @@ public class FunctionConfiguration {
|
||||
Map<String, BindableProxyFactory> 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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user