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

View File

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