diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java index 47e934b90..5e9a49ba5 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/config/ContextFunctionCatalogAutoConfiguration.java @@ -234,10 +234,11 @@ public class ContextFunctionCatalogAutoConfiguration { private Object compose(String name, Map lookup, boolean hasInput) { + name = name.replaceAll(",", "|"); if (lookup.containsKey(name)) { return lookup.get(name); } - String[] stages = StringUtils.tokenizeToStringArray(name, ","); + String[] stages = StringUtils.delimitedListToStringArray(name, "|"); Map source = !hasInput || stages.length <= 1 ? lookup : this.functions; if (stages.length == 0 && source.size() == 1) { diff --git a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionPostProcessorTests.java b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionPostProcessorTests.java index 2550e768c..b6fa952bd 100644 --- a/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionPostProcessorTests.java +++ b/spring-cloud-function-context/src/test/java/org/springframework/cloud/function/context/config/ContextFunctionPostProcessorTests.java @@ -91,13 +91,25 @@ public class ContextFunctionPostProcessorTests { } @Test - public void compose() { + public void composeWithComma() { processor.register(new FunctionRegistration<>(new Foos()).names("foos")); processor.register(new FunctionRegistration<>(new Bars()).names("bars")); @SuppressWarnings("unchecked") Function, Flux> foos = (Function, Flux>) processor .lookupFunction("foos,bars"); assertThat(foos.apply(Flux.just(2)).blockFirst()).isEqualTo("Hello 4"); + assertThat(processor.getRegistration(foos).getNames()).containsExactly("foos|bars"); + } + + @Test + public void compose() { + processor.register(new FunctionRegistration<>(new Foos()).names("foos")); + processor.register(new FunctionRegistration<>(new Bars()).names("bars")); + @SuppressWarnings("unchecked") + Function, Flux> foos = (Function, Flux>) processor + .lookupFunction("foos|bars"); + assertThat(foos.apply(Flux.just(2)).blockFirst()).isEqualTo("Hello 4"); + assertThat(processor.getRegistration(foos).getNames()).containsExactly("foos|bars"); } @Test