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`.
This commit is contained in:
@@ -18,11 +18,13 @@ package org.springframework.cloud.fn.splitter;
|
||||
|
||||
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 @@ import org.springframework.messaging.MessageChannel;
|
||||
public class SplitterFunctionConfiguration {
|
||||
|
||||
@Bean
|
||||
public Function<Message<?>, List<Message<?>>> splitterFunction(AbstractMessageSplitter messageSplitter,
|
||||
public Function<Message<?>, List<Message<?>>> splitterFunction(
|
||||
@Qualifier("expressionSplitter") Optional<AbstractMessageSplitter> expressionSplitter,
|
||||
@Qualifier("fileSplitter") Optional<AbstractMessageSplitter> fileSplitter,
|
||||
@Qualifier("defaultSplitter") Optional<AbstractMessageSplitter> defaultSplitter,
|
||||
SplitterFunctionProperties splitterFunctionProperties) {
|
||||
|
||||
AbstractMessageSplitter messageSplitter = expressionSplitter.or(() -> fileSplitter)
|
||||
.or(() -> defaultSplitter)
|
||||
.get();
|
||||
messageSplitter.setApplySequence(splitterFunctionProperties.isApplySequence());
|
||||
ThreadLocalFluxSinkMessageChannel outputChannel = new ThreadLocalFluxSinkMessageChannel();
|
||||
messageSplitter.setOutputChannel(outputChannel);
|
||||
|
||||
Reference in New Issue
Block a user