diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java index dedcefada2..604ed5d820 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/RecipientListRouter.java @@ -59,7 +59,7 @@ import org.springframework.util.Assert; */ public class RecipientListRouter extends AbstractMessageRouter implements InitializingBean { - private volatile Map> channelMap; + private volatile Map> channelMap; /** @@ -83,7 +83,7 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia * * @param channelMap */ - public void setChannelMap(Map> channelMap) { + public void setChannelMap(Map> channelMap) { this.channelMap = channelMap; } @@ -100,7 +100,8 @@ public class RecipientListRouter extends AbstractMessageRouter implements Initia @Override protected Collection determineTargetChannels(Message message) { List recipients = new ArrayList(); - Map> map = new HashMap>(this.channelMap); + Map> map = + new HashMap>(this.channelMap); for (MessageSelector selector : map.keySet()) { if (selector.accept(message)) { recipients.addAll(map.get(selector)); diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java index 3d7da11add..36c8c69981 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/RecipientListRouterTests.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -357,4 +358,58 @@ public class RecipientListRouterTests { router.afterPropertiesSet(); } + @Test + public void selectors() { + QueueChannel channel1 = new QueueChannel(); + QueueChannel channel2 = new QueueChannel(); + QueueChannel channel3 = new QueueChannel(); + QueueChannel channel4 = new QueueChannel(); + QueueChannel channel5 = new QueueChannel(); + QueueChannel channel6 = new QueueChannel(); + RecipientListRouter router = new RecipientListRouter(); + Map> channelMap = + new HashMap>(); + channelMap.put(new AlwaysTrueSelector(), Collections.singletonList(channel1)); + channelMap.put(new AlwaysFalseSelector(), Collections.singletonList(channel2)); + List acceptList = new ArrayList(); + acceptList.add(channel3); + acceptList.add(channel4); + channelMap.put(new AlwaysTrueSelector(), acceptList); + List rejectList = new ArrayList(); + rejectList.add(channel5); + rejectList.add(channel6); + channelMap.put(new AlwaysFalseSelector(), rejectList); + router.setChannelMap(channelMap); + Message message = new StringMessage("test"); + router.handleMessage(message); + Message reply1 = channel1.receive(0); + assertEquals(message, reply1); + Message reply2 = channel2.receive(0); + assertNull(reply2); + Message reply3 = channel3.receive(0); + assertEquals(message, reply3); + Message reply4 = channel4.receive(0); + assertEquals(message, reply4); + Message reply5 = channel5.receive(0); + assertNull(reply5); + Message reply6 = channel6.receive(0); + assertNull(reply6); + } + + + private static class AlwaysTrueSelector implements MessageSelector { + + public boolean accept(Message message) { + return true; + } + } + + + private static class AlwaysFalseSelector implements MessageSelector { + + public boolean accept(Message message) { + return false; + } + } + }