From 58ffb22fff8e587b112ce1298d9afc311b288cab Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Fri, 6 Dec 2024 13:22:59 -0500 Subject: [PATCH] GH-106: Fix `SplitterFunctionConfiguration` for ambiguity on auto-wiring Fixes: https://github.com/spring-cloud/spring-functions-catalog/issues/106 The `AbstractMessageSplitter messageSplitter` injection is too wide, and if target application has its own splitter bean, it becomes as a candidate. Since `SplitterFunctionConfiguration` expects only its own beans, rework the logic for `@Qualifier` and `Optional` to be explicit for expected beans from the `SplitterFunctionConfiguration`. --- .../fn/splitter/SplitterFunctionConfiguration.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/function/spring-splitter-function/src/main/java/org/springframework/cloud/fn/splitter/SplitterFunctionConfiguration.java b/function/spring-splitter-function/src/main/java/org/springframework/cloud/fn/splitter/SplitterFunctionConfiguration.java index 2faf4829..ad1887aa 100644 --- a/function/spring-splitter-function/src/main/java/org/springframework/cloud/fn/splitter/SplitterFunctionConfiguration.java +++ b/function/spring-splitter-function/src/main/java/org/springframework/cloud/fn/splitter/SplitterFunctionConfiguration.java @@ -18,11 +18,13 @@ import java.nio.charset.Charset; import java.util.List; +import java.util.Optional; import java.util.function.Function; import org.reactivestreams.Publisher; import reactor.core.publisher.Flux; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.condition.AnyNestedCondition; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; @@ -49,9 +51,15 @@ public class SplitterFunctionConfiguration { @Bean - public Function, List>> splitterFunction(AbstractMessageSplitter messageSplitter, + public Function, List>> splitterFunction( + @Qualifier("expressionSplitter") Optional expressionSplitter, + @Qualifier("fileSplitter") Optional fileSplitter, + @Qualifier("defaultSplitter") Optional defaultSplitter, SplitterFunctionProperties splitterFunctionProperties) { + AbstractMessageSplitter messageSplitter = expressionSplitter.or(() -> fileSplitter) + .or(() -> defaultSplitter) + .get(); messageSplitter.setApplySequence(splitterFunctionProperties.isApplySequence()); ThreadLocalFluxSinkMessageChannel outputChannel = new ThreadLocalFluxSinkMessageChannel(); messageSplitter.setOutputChannel(outputChannel);