diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/InMemoryFunctionCatalog.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/InMemoryFunctionCatalog.java index 8c65b5e6d..fe30861e9 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/InMemoryFunctionCatalog.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/InMemoryFunctionCatalog.java @@ -22,6 +22,7 @@ import java.util.function.Function; import java.util.function.Supplier; import org.springframework.cloud.function.registry.FunctionCatalog; +import org.springframework.util.StringUtils; /** * @author Dave Syer @@ -49,9 +50,18 @@ public class InMemoryFunctionCatalog implements FunctionCatalog { } @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({ "unchecked", "rawtypes" }) public Function lookupFunction(String name) { - return (Function) functions.get(name); + if (name.indexOf(',') == -1) { + return (Function) functions.get(name); + } + String[] tokens = StringUtils.tokenizeToStringArray(name, ","); + Function function = null; + for (String token : tokens) { + Function next = lookupFunction(token); + function = (function == null) ? next : function.andThen(next); + } + return function; } @Override diff --git a/spring-cloud-function-stream/src/main/java/org/springframework/cloud/function/stream/StreamConfiguration.java b/spring-cloud-function-stream/src/main/java/org/springframework/cloud/function/stream/StreamConfiguration.java index b25014fb1..a3c380156 100644 --- a/spring-cloud-function-stream/src/main/java/org/springframework/cloud/function/stream/StreamConfiguration.java +++ b/spring-cloud-function-stream/src/main/java/org/springframework/cloud/function/stream/StreamConfiguration.java @@ -138,6 +138,11 @@ public class StreamConfiguration { if (!StringUtils.hasText(functionName)) { return ConditionOutcome.noMatch("no function name available"); } + if (functionName.indexOf(',') != -1) { + // for now we will just check the first, but later may support: + // supplier[,function]+ or [function,]+consumer + functionName = functionName.substring(0, functionName.indexOf(',')); + } Class beanType = context.getBeanFactory().getType(functionName); if (type.isAssignableFrom(beanType)) { return ConditionOutcome.match(String.format("bean '%s' is a %s", functionName, type));