The router hierarchy abstract method names are now 'determineTargetChannel', 'determineTargetChannelNames', etc (instead of "resolve..."). This clarifies the distinction between the target channel decision and the resolution of a channel *name* to a channel instance. The latter is now the responsibility of a ChannelResolver strategy, and all subclasses of AbstractChannelNameResolvingMessageRouter now delegate to a ChannelResolver after 'determineTargetChannelNames' has returned the channel name(s). In most cases, it will be a BeanFactoryChannelResolver.
This commit is contained in:
@@ -68,10 +68,10 @@ public abstract class AbstractChannelNameResolvingMessageRouter extends Abstract
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Collection<MessageChannel> resolveChannels(Message<?> message) {
|
||||
protected final Collection<MessageChannel> determineTargetChannels(Message<?> message) {
|
||||
this.afterPropertiesSet();
|
||||
Collection<MessageChannel> channels = new ArrayList<MessageChannel>();
|
||||
String[] channelNames = this.resolveChannelNames(message);
|
||||
String[] channelNames = this.determineTargetChannelNames(message);
|
||||
if (channelNames == null) {
|
||||
return null;
|
||||
}
|
||||
@@ -99,6 +99,6 @@ public abstract class AbstractChannelNameResolvingMessageRouter extends Abstract
|
||||
/**
|
||||
* Subclasses must implement this method to return the channel name(s).
|
||||
*/
|
||||
protected abstract String[] resolveChannelNames(Message<?> message);
|
||||
protected abstract String[] determineTargetChannelNames(Message<?> message);
|
||||
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ public abstract class AbstractMessageRouter extends AbstractMessageConsumer {
|
||||
@Override
|
||||
protected void onMessageInternal(Message<?> message) {
|
||||
boolean sent = false;
|
||||
Collection<MessageChannel> results = this.resolveChannels(message);
|
||||
Collection<MessageChannel> results = this.determineTargetChannels(message);
|
||||
if (results != null) {
|
||||
for (MessageChannel channel : results) {
|
||||
if (channel != null) {
|
||||
@@ -94,6 +94,6 @@ public abstract class AbstractMessageRouter extends AbstractMessageConsumer {
|
||||
* Subclasses must implement this method to return the target channels for
|
||||
* a given Message.
|
||||
*/
|
||||
protected abstract Collection<MessageChannel> resolveChannels(Message<?> message);
|
||||
protected abstract Collection<MessageChannel> determineTargetChannels(Message<?> message);
|
||||
|
||||
}
|
||||
|
||||
@@ -19,16 +19,22 @@ package org.springframework.integration.router;
|
||||
import org.springframework.integration.message.Message;
|
||||
|
||||
/**
|
||||
* Extends {@link AbstractChannelNameResolvingMessageRouter} to support router
|
||||
* implementations that always return a single channel name (or null).
|
||||
*
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public abstract class AbstractSingleChannelNameRouter extends AbstractChannelNameResolvingMessageRouter {
|
||||
|
||||
@Override
|
||||
protected final String[] resolveChannelNames(Message<?> message) {
|
||||
String channelName = this.resolveChannelName(message);
|
||||
protected final String[] determineTargetChannelNames(Message<?> message) {
|
||||
String channelName = this.determineTargetChannelName(message);
|
||||
return (channelName != null) ? new String[] { channelName } : null;
|
||||
}
|
||||
|
||||
protected abstract String resolveChannelName(Message<?> message);
|
||||
/**
|
||||
* Subclasses must implement this method to return the channel name.
|
||||
*/
|
||||
protected abstract String determineTargetChannelName(Message<?> message);
|
||||
|
||||
}
|
||||
|
||||
@@ -23,16 +23,22 @@ import org.springframework.integration.channel.MessageChannel;
|
||||
import org.springframework.integration.message.Message;
|
||||
|
||||
/**
|
||||
* Extends {@link AbstractMessageRouter} to support router implementations that
|
||||
* always return a single {@link MessageChannel} instance (or null).
|
||||
*
|
||||
* @author Mark Fisher
|
||||
*/
|
||||
public abstract class AbstractSingleChannelRouter extends AbstractMessageRouter {
|
||||
|
||||
@Override
|
||||
protected final Collection<MessageChannel> resolveChannels(Message<?> message) {
|
||||
MessageChannel channel = this.resolveChannel(message);
|
||||
protected final Collection<MessageChannel> determineTargetChannels(Message<?> message) {
|
||||
MessageChannel channel = this.determineTargetChannel(message);
|
||||
return (channel != null) ? Collections.singletonList(channel) : null;
|
||||
}
|
||||
|
||||
protected abstract MessageChannel resolveChannel(Message<?> message);
|
||||
/**
|
||||
* Subclasses must implement this method to return the target channel.
|
||||
*/
|
||||
protected abstract MessageChannel determineTargetChannel(Message<?> message);
|
||||
|
||||
}
|
||||
|
||||
@@ -43,7 +43,7 @@ public class ErrorMessageExceptionTypeRouter extends AbstractSingleChannelRouter
|
||||
|
||||
|
||||
@Override
|
||||
protected MessageChannel resolveChannel(Message<?> message) {
|
||||
protected MessageChannel determineTargetChannel(Message<?> message) {
|
||||
MessageChannel channel = null;
|
||||
Object payload = message.getPayload();
|
||||
if (payload != null && (payload instanceof Throwable)) {
|
||||
|
||||
@@ -67,7 +67,7 @@ public class MethodInvokingRouter extends AbstractMessageRouter implements Initi
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final Collection<MessageChannel> resolveChannels(Message<?> message) {
|
||||
protected final Collection<MessageChannel> determineTargetChannels(Message<?> message) {
|
||||
Object result = this.invoker.invokeMethod(message);
|
||||
if (result == null) {
|
||||
return null;
|
||||
|
||||
@@ -41,7 +41,7 @@ public class PayloadTypeRouter extends AbstractSingleChannelRouter {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected MessageChannel resolveChannel(Message<?> message) {
|
||||
protected MessageChannel determineTargetChannel(Message<?> message) {
|
||||
return this.payloadTypeChannelMap.get(message.getPayload().getClass());
|
||||
}
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Collection<MessageChannel> resolveChannels(Message<?> message) {
|
||||
protected Collection<MessageChannel> determineTargetChannels(Message<?> message) {
|
||||
return this.channels;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user