GH-2624 Ensure BindableFunctionProxyFactory is aware of no-corresponding-function bindings

Resolves #2624
This commit is contained in:
Oleg Zhurakousky
2023-01-18 15:24:10 +01:00
parent 2cd7d07ba8
commit e8a2018b08
2 changed files with 21 additions and 6 deletions

View File

@@ -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;
}
}

View File

@@ -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);
}