From a9cd4c9b84dc6ba50b23bf1f9bc72d7e882c75ae Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 24 Jul 2020 14:17:05 +0200 Subject: [PATCH] Fix getRegistration method --- .../context/catalog/SimpleFunctionRegistry.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java index fe278d55a..68c686762 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/SimpleFunctionRegistry.java @@ -187,12 +187,14 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect @Override public FunctionRegistration getRegistration(Object function) { FunctionRegistration registration = this.registrationsByFunction.get(function); - // need to do this due to the deployer not wrapping the actual target into FunctionInvocationWrapper - // hence the lookup would need to be made by the actual target if (registration == null && function instanceof FunctionInvocationWrapper) { - function = ((FunctionInvocationWrapper) function).target; + registration = this.registrationsByName.get(((FunctionInvocationWrapper) function).getFunctionDefinition()); + if (registration == null) { + function = ((FunctionInvocationWrapper) function).target; + registration = this.registrationsByFunction.get(function); + } } - return this.registrationsByFunction.get(function); + return registration; } Object locateFunction(String name) { @@ -268,7 +270,12 @@ public class SimpleFunctionRegistry implements FunctionRegistry, FunctionInspect if (this.registrationsByName.containsKey(definition)) { Object targetFunction = this.registrationsByName.get(definition).getTarget(); Type functionType = this.registrationsByName.get(definition).getType().getType(); - resultFunction = new FunctionInvocationWrapper(targetFunction, functionType, definition, acceptedOutputTypes); + if (targetFunction instanceof FunctionInvocationWrapper) { + resultFunction = new FunctionInvocationWrapper(((FunctionInvocationWrapper) targetFunction).getTarget(), functionType, definition, acceptedOutputTypes); + } + else { + resultFunction = new FunctionInvocationWrapper(targetFunction, functionType, definition, acceptedOutputTypes); + } } else { String[] names = StringUtils.delimitedListToStringArray(definition.replaceAll(",", "|").trim(), "|");