From 9514ed76490be3d6ae349572e3676d9c2142dcdd Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Thu, 22 Aug 2019 20:33:42 +0200 Subject: [PATCH] Fix discovery of the default function --- .../BeanFactoryAwareFunctionRegistry.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java index adfff2692..e4120d204 100644 --- a/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java +++ b/spring-cloud-function-context/src/main/java/org/springframework/cloud/function/context/catalog/BeanFactoryAwareFunctionRegistry.java @@ -32,6 +32,7 @@ import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; import java.util.stream.Collectors; +import java.util.stream.Stream; import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation; @@ -193,10 +194,18 @@ public class BeanFactoryAwareFunctionRegistry private String discoverDefaultDefinitionIfNecessary(String definition) { if (StringUtils.isEmpty(definition)) { - String[] functionNames = this.applicationContext.getBeanNamesForType(Function.class); - if (!ObjectUtils.isEmpty(functionNames)) { - Assert.isTrue(functionNames.length == 1, "Found more then one function in BeanFactory"); - definition = functionNames[0]; + String[] functionNames = this.applicationContext.getBeanNamesForType(Function.class); + String[] consumerNames = this.applicationContext.getBeanNamesForType(Consumer.class); + String[] supplierNames = this.applicationContext.getBeanNamesForType(Supplier.class); + /* + * we may need to add BiFunction and BuConsumer at some point + */ + List names = Stream + .concat(Stream.of(functionNames), Stream.concat(Stream.of(consumerNames), Stream.of(supplierNames))).collect(Collectors.toList()); + + if (!ObjectUtils.isEmpty(names)) { + Assert.isTrue(names.size() == 1, "Found more then one function in BeanFactory: " + names); + definition = names.get(0); } else { if (this.registrationsByName.size() > 0) {