From 713c252576f51a9232ec053b80189fb44c9cff44 Mon Sep 17 00:00:00 2001 From: Soby Chacko Date: Wed, 16 Oct 2019 18:42:53 -0400 Subject: [PATCH] Fix issues with binders and BindingProvider When multiple binders are present with at least one of them is marked with BindingProvider, it skips scanning functions for regular message channel based binders. Resolves #1820 --- .../cloud/stream/function/FunctionConfiguration.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java index dd6163fbd..f8df11fe8 100644 --- a/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java +++ b/spring-cloud-stream/src/main/java/org/springframework/cloud/stream/function/FunctionConfiguration.java @@ -588,12 +588,7 @@ public class FunctionConfiguration { @Override public void afterPropertiesSet() throws Exception { - Class[] configurationClasses = binderTypeRegistry.getAll().values().iterator().next() - .getConfigurationClasses(); - boolean bindingProvider = Stream.of(configurationClasses) - .filter(clazz -> AnnotationUtils.findAnnotation(clazz, BindingProvider.class) != null) - .findFirst().isPresent(); - if (!bindingProvider + if (nonBindingProviderBindersFound() && ObjectUtils.isEmpty(applicationContext.getBeanNamesForAnnotation(EnableBinding.class)) && this.determineFunctionName(functionCatalog, environment)) { BeanDefinitionRegistry registry = (BeanDefinitionRegistry) applicationContext.getBeanFactory(); @@ -626,6 +621,11 @@ public class FunctionConfiguration { } } + private boolean nonBindingProviderBindersFound() { + return binderTypeRegistry.getAll().values().stream().anyMatch(binderType -> Stream.of(binderType.getConfigurationClasses()) + .anyMatch(clazz -> AnnotationUtils.findAnnotation(clazz, BindingProvider.class) == null)); + } + private boolean determineFunctionName(FunctionCatalog catalog, Environment environment) { String definition = streamFunctionProperties.getDefinition(); if (!StringUtils.hasText(definition)) {