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 SupportedBindableFeatures supportedBindableFeatures;
|
||||||
|
|
||||||
|
private final boolean functionExist;
|
||||||
|
|
||||||
private GenericApplicationContext context;
|
private GenericApplicationContext context;
|
||||||
|
|
||||||
BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties) {
|
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,
|
BindableFunctionProxyFactory(String functionDefinition, int inputCount, int outputCount, StreamFunctionProperties functionProperties,
|
||||||
SupportedBindableFeatures supportedBindableFeatures) {
|
SupportedBindableFeatures supportedBindableFeatures, boolean functionExist) {
|
||||||
super(null);
|
super(null);
|
||||||
this.inputCount = inputCount;
|
this.inputCount = inputCount;
|
||||||
this.outputCount = outputCount;
|
this.outputCount = outputCount;
|
||||||
this.functionDefinition = functionDefinition;
|
this.functionDefinition = functionDefinition;
|
||||||
this.functionProperties = functionProperties;
|
this.functionProperties = functionProperties;
|
||||||
this.supportedBindableFeatures = supportedBindableFeatures;
|
this.supportedBindableFeatures = supportedBindableFeatures;
|
||||||
|
this.functionExist = functionExist;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -104,7 +115,7 @@ public class BindableFunctionProxyFactory extends BindableProxyFactory implement
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected String getFunctionDefinition() {
|
protected String getFunctionDefinition() {
|
||||||
return this.functionDefinition;
|
return this.isFunctionExist() ? this.functionDefinition : null;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String getInputName(int index) {
|
protected String getInputName(int index) {
|
||||||
@@ -188,4 +199,8 @@ public class BindableFunctionProxyFactory extends BindableProxyFactory implement
|
|||||||
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
|
||||||
this.context = (GenericApplicationContext) applicationContext;
|
this.context = (GenericApplicationContext) applicationContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isFunctionExist() {
|
||||||
|
return functionExist;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -436,9 +436,9 @@ public class FunctionConfiguration {
|
|||||||
Map<String, BindableProxyFactory> beansOfType = applicationContext.getBeansOfType(BindableProxyFactory.class);
|
Map<String, BindableProxyFactory> beansOfType = applicationContext.getBeansOfType(BindableProxyFactory.class);
|
||||||
this.bindableProxyFactories = beansOfType.values().toArray(new BindableProxyFactory[0]);
|
this.bindableProxyFactories = beansOfType.values().toArray(new BindableProxyFactory[0]);
|
||||||
for (BindableProxyFactory bindableProxyFactory : this.bindableProxyFactories) {
|
for (BindableProxyFactory bindableProxyFactory : this.bindableProxyFactories) {
|
||||||
String functionDefinition = bindableProxyFactory instanceof BindableFunctionProxyFactory
|
String functionDefinition = bindableProxyFactory instanceof BindableFunctionProxyFactory && ((BindableFunctionProxyFactory) bindableProxyFactory).isFunctionExist()
|
||||||
? ((BindableFunctionProxyFactory) bindableProxyFactory).getFunctionDefinition()
|
? ((BindableFunctionProxyFactory) bindableProxyFactory).getFunctionDefinition()
|
||||||
: this.functionProperties.getDefinition();
|
: null; /*this.functionProperties.getDefinition();*/
|
||||||
|
|
||||||
boolean shouldNotProcess = false;
|
boolean shouldNotProcess = false;
|
||||||
if (!(bindableProxyFactory instanceof BindableFunctionProxyFactory)) {
|
if (!(bindableProxyFactory instanceof BindableFunctionProxyFactory)) {
|
||||||
@@ -898,7 +898,7 @@ public class FunctionConfiguration {
|
|||||||
sourceFunc.isConsumer() ||
|
sourceFunc.isConsumer() ||
|
||||||
(!sourceFunc.getFunctionDefinition().equals(outputBindingName) && applicationContext.containsBean(outputBindingName))) {
|
(!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",
|
((GenericApplicationContext) this.applicationContext).registerBean(outputBindingName + "_binding_out",
|
||||||
BindableFunctionProxyFactory.class, () -> proxyFactory);
|
BindableFunctionProxyFactory.class, () -> proxyFactory);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user