Added Router strategy interface, and refactored Message-routing support in general to avoid MessageHandler.

This commit is contained in:
Mark Fisher
2008-08-28 18:46:36 +00:00
parent 62c7439960
commit ba9c086aea
19 changed files with 900 additions and 665 deletions

View File

@@ -17,8 +17,10 @@
package org.springframework.integration.router;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -32,101 +34,117 @@ import org.springframework.integration.channel.ChannelRegistryAware;
import org.springframework.integration.channel.DefaultChannelRegistry;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.CompositeMessage;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessageBuilder;
import org.springframework.integration.message.MessageHandlingException;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.message.StringMessage;
/**
* @author Mark Fisher
*/
public class RouterMessageHandlerTests {
public class MethodInvokingRouterTests {
@Test
public void channelNameResolutionByPayloadConfiguredByMethodReference() throws Exception {
QueueChannel barChannel = new QueueChannel();
barChannel.setBeanName("bar-channel");
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
channelRegistry.registerChannel(barChannel);
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routePayload", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
router.setChannelRegistry(channelRegistry);
Message<String> message = new GenericMessage<String>("bar");
Message<?> reply = handler.handle(message);
assertNotNull(reply);
assertEquals(CompositeMessage.class, reply.getClass());
List<Message<?>> replyMessages = ((CompositeMessage) reply).getPayload();
assertEquals(1, replyMessages.size());
Message<?> replyMessage = replyMessages.get(0);
assertEquals("bar", replyMessage.getPayload());
assertEquals("bar-channel", replyMessage.getHeaders().getNextTarget());
assertTrue(router.route(message));
Message<?> replyMessage = barChannel.receive();
assertNotNull(replyMessage);
assertEquals(message, replyMessage);
}
@Test
public void channelNameResolutionByPayloadConfiguredByMethodName() {
QueueChannel barChannel = new QueueChannel();
barChannel.setBeanName("bar-channel");
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
channelRegistry.registerChannel(barChannel);
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routePayload");
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routePayload");
router.setChannelRegistry(channelRegistry);
Message<String> message = new GenericMessage<String>("bar");
Message<?> reply = handler.handle(message);
assertNotNull(reply);
assertNotNull(reply);
assertEquals(CompositeMessage.class, reply.getClass());
List<Message<?>> replyMessages = ((CompositeMessage) reply).getPayload();
assertEquals(1, replyMessages.size());
Message<?> replyMessage = replyMessages.get(0);
assertEquals("bar", replyMessage.getPayload());
assertEquals("bar-channel", replyMessage.getHeaders().getNextTarget());
assertTrue(router.route(message));
Message<?> replyMessage = barChannel.receive();
assertNotNull(replyMessage);
assertEquals(message, replyMessage);
}
@Test
public void channelNameResolutionByHeader() throws Exception {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routeByHeader", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
router.setChannelRegistry(channelRegistry);
Message<String> message = MessageBuilder.fromPayload("bar")
.setHeader("targetChannel", "foo").build();
Message<?> reply = handler.handle(message);
assertNotNull(reply);
assertEquals(CompositeMessage.class, reply.getClass());
List<Message<?>> replyMessages = ((CompositeMessage) reply).getPayload();
assertEquals(1, replyMessages.size());
Message<?> replyMessage = replyMessages.get(0);
assertEquals("bar", replyMessage.getPayload());
assertEquals("foo-channel", replyMessage.getHeaders().getNextTarget());
assertTrue(router.route(message));
Message<?> fooReply = fooChannel.receive(0);
Message<?> barReply = barChannel.receive(0);
assertNotNull(fooReply);
assertNull(barReply);
assertEquals(message, fooReply);
}
@Test(expected=MessageHandlingException.class)
public void failsWhenRequireddHeaderIsNotProvided() throws Exception {
@Test(expected = MessagingException.class)
public void failsWhenRequiredHeaderIsNotProvided() throws Exception {
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routeByHeader", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
handler.handle(new GenericMessage<String>("testing"));
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
router.route(new GenericMessage<String>("testing"));
}
@Test
public void channelNameResolutionByMessageConfiguredByMethodReference() throws Exception {
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routeMessage", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestChannelNameResolutionByMessage(handler);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestChannelNameResolutionByMessage(router);
}
@Test
public void channelNameResolutionByMessageConfiguredByMethodName() {
SingleChannelNameRoutingTestBean testBean = new SingleChannelNameRoutingTestBean();
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessage");
this.doTestChannelNameResolutionByMessage(handler);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessage");
this.doTestChannelNameResolutionByMessage(router);
}
private void doTestChannelNameResolutionByMessage(RouterMessageHandler handler) {
private void doTestChannelNameResolutionByMessage(MethodInvokingRouter router) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
Message<?> result1 = ((CompositeMessage) handler.handle(fooMessage)).getPayload().get(0);
assertTrue(router.route(fooMessage));
Message<?> result1 = fooChannel.receive(0);
assertNotNull(result1);
assertEquals("foo", result1.getPayload());
Message<?> result2 = ((CompositeMessage) handler.handle(barMessage)).getPayload().get(0);
assertTrue(router.route(barMessage));
Message<?> result2 = barChannel.receive(0);
assertNotNull(result2);
assertEquals("bar", result2.getPayload());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
@@ -134,19 +152,19 @@ public class RouterMessageHandlerTests {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelInstanceRoutingTestBean testBean = new SingleChannelInstanceRoutingTestBean(channelRegistry);
Method routingMethod = testBean.getClass().getMethod("routePayload", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestChannelInstanceResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestChannelInstanceResolutionByPayload(router, channelRegistry);
}
@Test
public void channelInstanceResolutionByPayloadConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelInstanceRoutingTestBean testBean = new SingleChannelInstanceRoutingTestBean(channelRegistry);
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routePayload");
this.doTestChannelInstanceResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routePayload");
this.doTestChannelInstanceResolutionByPayload(router, channelRegistry);
}
private void doTestChannelInstanceResolutionByPayload(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestChannelInstanceResolutionByPayload(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
@@ -156,15 +174,16 @@ public class RouterMessageHandlerTests {
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
Message<?> result1 = ((CompositeMessage) handler.handle(fooMessage)).getPayload().get(0);
router.setChannelRegistry(channelRegistry);
assertTrue(router.route(fooMessage));
Message<?> result1 = fooChannel.receive(0);
assertNotNull(result1);
assertEquals("foo", result1.getPayload());
assertEquals(fooChannel, result1.getHeaders().getNextTarget());
Message<?> result2 = ((CompositeMessage) handler.handle(barMessage)).getPayload().get(0);
assertTrue(router.route(barMessage));
Message<?> result2 = barChannel.receive(0);
assertNotNull(result2);
assertEquals("bar", result2.getPayload());
assertEquals(barChannel, result2.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
@@ -172,37 +191,38 @@ public class RouterMessageHandlerTests {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelInstanceRoutingTestBean testBean = new SingleChannelInstanceRoutingTestBean(channelRegistry);
Method routingMethod = testBean.getClass().getMethod("routeMessage", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestChannelInstanceResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestChannelInstanceResolutionByMessage(router, channelRegistry);
}
@Test
public void channelInstanceResolutionByMessageConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelInstanceRoutingTestBean testBean = new SingleChannelInstanceRoutingTestBean(channelRegistry);
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessage");
this.doTestChannelInstanceResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessage");
this.doTestChannelInstanceResolutionByMessage(router, channelRegistry);
}
private void doTestChannelInstanceResolutionByMessage(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestChannelInstanceResolutionByMessage(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
Message<?> result1 = ((CompositeMessage) handler.handle(fooMessage)).getPayload().get(0);
assertTrue(router.route(fooMessage));
Message<?> result1 = fooChannel.receive(0);
assertNotNull(result1);
assertEquals("foo", result1.getPayload());
assertEquals(fooChannel, result1.getHeaders().getNextTarget());
Message<?> result2 = ((CompositeMessage) handler.handle(barMessage)).getPayload().get(0);
assertTrue(router.route(barMessage));
Message<?> result2 = barChannel.receive(0);
assertNotNull(result2);
assertEquals("bar", result2.getPayload());
assertEquals(barChannel, result2.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
@@ -210,47 +230,44 @@ public class RouterMessageHandlerTests {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routePayload", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelNameResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelNameResolutionByPayload(router, channelRegistry);
}
@Test
public void multiChannelNameResolutionByPayloadConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routePayload");
this.doTestMultiChannelNameResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routePayload");
this.doTestMultiChannelNameResolutionByPayload(router, channelRegistry);
}
private void doTestMultiChannelNameResolutionByPayload(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelNameResolutionByPayload(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
Message<?> result1b = reply1.getPayload().get(1);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals("foo-channel", result1a.getHeaders().getNextTarget());
assertEquals("foo", result1a.getPayload());
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals("bar-channel", result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
Message<?> result2b = reply2.getPayload().get(1);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals("foo-channel", result2a.getHeaders().getNextTarget());
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals("bar-channel", result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
@@ -258,239 +275,224 @@ public class RouterMessageHandlerTests {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routeMessage", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelNameResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelNameResolutionByMessage(router, channelRegistry);
}
@Test
public void multiChannelNameResolutionByMessageConfiguredByMethodName() throws Exception {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessage");
this.doTestMultiChannelNameResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessage");
this.doTestMultiChannelNameResolutionByMessage(router, channelRegistry);
}
private void doTestMultiChannelNameResolutionByMessage(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelNameResolutionByMessage(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals("foo-channel", result1a.getHeaders().getNextTarget());
Message<?> result1b = reply1.getPayload().get(1);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals("bar-channel", result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals("foo-channel", result2a.getHeaders().getNextTarget());
Message<?> result2b = reply2.getPayload().get(1);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals("bar-channel", result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
public void testMultiChannelNameArrayResolutionByMessageConfiguredByMethodReference() throws Exception {
public void multiChannelNameArrayResolutionByMessageConfiguredByMethodReference() throws Exception {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
Method routingMethod = testBean.getClass().getMethod("routeMessageToArray", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelNameArrayResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelNameArrayResolutionByMessage(router, channelRegistry);
}
@Test
public void testMultiChannelNameArrayResolutionByMessageConfiguredByMethodName() {
public void multiChannelNameArrayResolutionByMessageConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelNameRoutingTestBean testBean = new MultiChannelNameRoutingTestBean();
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessageToArray");
this.doTestMultiChannelNameArrayResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessageToArray");
this.doTestMultiChannelNameArrayResolutionByMessage(router, channelRegistry);
}
private void doTestMultiChannelNameArrayResolutionByMessage(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelNameArrayResolutionByMessage(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals("foo-channel", result1a.getHeaders().getNextTarget());
Message<?> result1b = reply1.getPayload().get(1);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals("bar-channel", result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals("foo-channel", result2a.getHeaders().getNextTarget());
Message<?> result2b = reply2.getPayload().get(1);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals("bar-channel", result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
public void testMultiChannelListResolutionByPayloadConfiguredByMethodReference() throws Exception {
public void multiChannelListResolutionByPayloadConfiguredByMethodReference() throws Exception {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
Method routingMethod = testBean.getClass().getMethod("routePayload", String.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelListResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelListResolutionByPayload(router, channelRegistry);
}
@Test
public void testMultiChannelListResolutionByPayloadConfiguredByMethodName() {
public void multiChannelListResolutionByPayloadConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routePayload");
this.doTestMultiChannelListResolutionByPayload(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routePayload");
this.doTestMultiChannelListResolutionByPayload(router, channelRegistry);
}
private void doTestMultiChannelListResolutionByPayload(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelListResolutionByPayload(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
Message<?> result1b = reply1.getPayload().get(1);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals(fooChannel, result1a.getHeaders().getNextTarget());
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals(barChannel, result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
Message<?> result2b = reply2.getPayload().get(1);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals(fooChannel, result2a.getHeaders().getNextTarget());
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals(barChannel, result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
public void testMultiChannelListResolutionByMessageConfiguredByMethodReference() throws Exception {
public void multiChannelListResolutionByMessageConfiguredByMethodReference() throws Exception {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
Method routingMethod = testBean.getClass().getMethod("routeMessage", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelListResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelListResolutionByMessage(router, channelRegistry);
}
@Test
public void testMultiChannelListResolutionByMessageConfiguredByMethodName() {
public void multiChannelListResolutionByMessageConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessage");
this.doTestMultiChannelListResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessage");
this.doTestMultiChannelListResolutionByMessage(router, channelRegistry);
}
private void doTestMultiChannelListResolutionByMessage(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelListResolutionByMessage(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
Message<?> result1b = reply1.getPayload().get(1);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals(fooChannel, result1a.getHeaders().getNextTarget());
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals(barChannel, result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
Message<?> result2b = reply2.getPayload().get(1);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals(fooChannel, result2a.getHeaders().getNextTarget());
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals(barChannel, result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}
@Test
public void testMultiChannelArrayResolutionByMessageConfiguredByMethodReference() throws Exception {
public void multiChannelArrayResolutionByMessageConfiguredByMethodReference() throws Exception {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
Method routingMethod = testBean.getClass().getMethod("routeMessageToArray", Message.class);
RouterMessageHandler handler = new RouterMessageHandler(testBean, routingMethod);
this.doTestMultiChannelArrayResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, routingMethod);
this.doTestMultiChannelArrayResolutionByMessage(router, channelRegistry);
}
@Test
public void testMultiChannelArrayResolutionByMessageConfiguredByMethodName() {
public void multiChannelArrayResolutionByMessageConfiguredByMethodName() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelInstanceRoutingTestBean testBean = new MultiChannelInstanceRoutingTestBean(channelRegistry);
RouterMessageHandler handler = new RouterMessageHandler(testBean, "routeMessageToArray");
this.doTestMultiChannelArrayResolutionByMessage(handler, channelRegistry);
MethodInvokingRouter router = new MethodInvokingRouter(testBean, "routeMessageToArray");
this.doTestMultiChannelArrayResolutionByMessage(router, channelRegistry);
}
private void doTestMultiChannelArrayResolutionByMessage(RouterMessageHandler handler, ChannelRegistry channelRegistry) {
private void doTestMultiChannelArrayResolutionByMessage(MethodInvokingRouter router, ChannelRegistry channelRegistry) {
QueueChannel fooChannel = new QueueChannel();
QueueChannel barChannel = new QueueChannel();
fooChannel.setBeanName("foo-channel");
barChannel.setBeanName("bar-channel");
channelRegistry.registerChannel(fooChannel);
channelRegistry.registerChannel(barChannel);
router.setChannelRegistry(channelRegistry);
Message<String> fooMessage = new StringMessage("foo");
Message<String> barMessage = new StringMessage("bar");
Message<String> badMessage = new StringMessage("bad");
CompositeMessage reply1 = (CompositeMessage) handler.handle(fooMessage);
Message<?> result1a = reply1.getPayload().get(0);
Message<?> result1b = reply1.getPayload().get(1);
assertTrue(router.route(fooMessage));
Message<?> result1a = fooChannel.receive(0);
Message<?> result1b = barChannel.receive(0);
assertNotNull(result1a);
assertEquals("foo", result1a.getPayload());
assertEquals(fooChannel, result1a.getHeaders().getNextTarget());
assertNotNull(result1b);
assertEquals("foo", result1b.getPayload());
assertEquals(barChannel, result1b.getHeaders().getNextTarget());
CompositeMessage reply2 = (CompositeMessage) handler.handle(barMessage);
Message<?> result2a = reply2.getPayload().get(0);
Message<?> result2b = reply2.getPayload().get(1);
assertTrue(router.route(barMessage));
Message<?> result2a = fooChannel.receive(0);
Message<?> result2b = barChannel.receive(0);
assertNotNull(result2a);
assertEquals("bar", result2a.getPayload());
assertEquals(fooChannel, result2a.getHeaders().getNextTarget());
assertNotNull(result2b);
assertEquals("bar", result2b.getPayload());
assertEquals(barChannel, result2b.getHeaders().getNextTarget());
assertNull(handler.handle(badMessage));
assertFalse(router.route(badMessage));
}

View File

@@ -30,7 +30,7 @@ import org.springframework.integration.channel.DefaultChannelRegistry;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessageHandlingException;
import org.springframework.integration.message.MessageDeliveryException;
import org.springframework.integration.message.StringMessage;
/**
@@ -39,7 +39,7 @@ import org.springframework.integration.message.StringMessage;
public class MultiChannelRouterTests {
@Test
public void testRoutingWithChannelResolver() {
public void routeWithChannelResolver() {
final QueueChannel channel1 = new QueueChannel();
final QueueChannel channel2 = new QueueChannel();
MultiChannelResolver channelResolver = new MultiChannelResolver() {
@@ -54,7 +54,7 @@ public class MultiChannelRouterTests {
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result1 = channel1.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -64,7 +64,7 @@ public class MultiChannelRouterTests {
}
@Test
public void testRoutingWithChannelNameResolver() {
public void routeWithChannelNameResolver() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {"channel1", "channel2"};
@@ -82,7 +82,7 @@ public class MultiChannelRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result1 = channel1.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -91,8 +91,8 @@ public class MultiChannelRouterTests {
assertEquals("test", result2.getPayload());
}
@Test(expected=ConfigurationException.class)
public void testConfiguringBothChannelResolverAndChannelNameResolverIsNotAllowed() {
@Test(expected = ConfigurationException.class)
public void configuringBothChannelResolverAndChannelNameResolverIsNotAllowed() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return null;
@@ -109,37 +109,8 @@ public class MultiChannelRouterTests {
router.afterPropertiesSet();
}
@Test
public void testChannelResolutionFailureIgnoredByDefault() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return null;
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
}
@Test(expected=MessageHandlingException.class)
public void testChannelResolutionFailureThrowsExceptionWhenResolutionRequired() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return null;
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.setResolutionRequired(true);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
}
@Test
public void testChannelNameResolutionFailureIgnoredByDefault() {
@Test(expected = MessageDeliveryException.class)
public void channelNameLookupFailure() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {"noSuchChannel"};
@@ -151,52 +122,11 @@ public class MultiChannelRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
}
@Test(expected=MessageHandlingException.class)
public void testChannelNameResolutionFailureThrowsExceptionWhenResolutionRequired() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return null;
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.setChannelRegistry(channelRegistry);
router.setResolutionRequired(true);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
}
@Test(expected=ConfigurationException.class)
public void testChannelRegistryIsRequiredWhenUsingChannelNameResolver() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {"notImportant"};
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.resolveChannels(new StringMessage("this should fail"));
}
@Test(expected=ConfigurationException.class)
public void testValidateChannelRegistryIsPresentWhenUsingChannelNameResolver() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {"notImportant"};
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
}
@Test(expected=ConfigurationException.class)
public void testChannelResolverIsRequired() {
@Test(expected = ConfigurationException.class)
public void channelResolverIsRequired() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelRegistry(channelRegistry);

View File

@@ -47,8 +47,8 @@ public class PayloadTypeRouterTests {
router.afterPropertiesSet();
Message<String> message1 = new StringMessage("test");
Message<Integer> message2 = new GenericMessage<Integer>(123);
router.handle(message1);
router.handle(message2);
router.route(message1);
router.route(message2);
Message<?> result1 = stringChannel.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -69,8 +69,8 @@ public class PayloadTypeRouterTests {
router.afterPropertiesSet();
Message<String> message1 = new StringMessage("test");
Message<Integer> message2 = new GenericMessage<Integer>(123);
router.handle(message1);
router.handle(message2);
router.route(message1);
router.route(message2);
Message<?> result1 = stringChannel.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());

View File

@@ -39,7 +39,7 @@ import org.springframework.integration.message.StringMessage;
public class RecipientListRouterTests {
@Test
public void testRoutingWithChannelList() {
public void routeWithChannelList() {
QueueChannel channel1 = new QueueChannel();
QueueChannel channel2 = new QueueChannel();
List<MessageChannel> channels = new ArrayList<MessageChannel>();
@@ -49,7 +49,7 @@ public class RecipientListRouterTests {
router.setChannels(channels);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result1 = channel1.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -59,7 +59,7 @@ public class RecipientListRouterTests {
}
@Test
public void testRoutingWithChannelNames() {
public void routeWithChannelNames() {
QueueChannel channel1 = new QueueChannel();
QueueChannel channel2 = new QueueChannel();
channel1.setBeanName("channel1");
@@ -72,7 +72,7 @@ public class RecipientListRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result1 = channel1.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -82,7 +82,7 @@ public class RecipientListRouterTests {
}
@Test
public void testRoutingToSingleChannelByName() {
public void routeToSingleChannelByName() {
QueueChannel channel1 = new QueueChannel();
QueueChannel channel2 = new QueueChannel();
channel1.setBeanName("channel1");
@@ -95,7 +95,7 @@ public class RecipientListRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result1 = channel1.receive(25);
assertNotNull(result1);
assertEquals("test", result1.getPayload());
@@ -103,8 +103,8 @@ public class RecipientListRouterTests {
assertNull(result2);
}
@Test(expected=ConfigurationException.class)
public void testConfigurationExceptionWhenBothChannelsAndNamesAreProvided() {
@Test(expected = ConfigurationException.class)
public void configurationExceptionWhenBothChannelsAndNamesAreProvided() {
QueueChannel channel1 = new QueueChannel();
QueueChannel channel2 = new QueueChannel();
channel1.setBeanName("channel1");

View File

@@ -65,7 +65,7 @@ public class RootCauseErrorMessageRouterTests {
router.setChannelMappings(channelMappings);
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(illegalArgumentChannel.receive(1000));
assertNull(defaultChannel.receive(0));
assertNull(runtimeExceptionChannel.receive(0));
@@ -87,7 +87,7 @@ public class RootCauseErrorMessageRouterTests {
router.setChannelMappings(channelMappings);
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(runtimeExceptionChannel.receive(1000));
assertNull(illegalArgumentChannel.receive(0));
assertNull(defaultChannel.receive(0));
@@ -108,7 +108,7 @@ public class RootCauseErrorMessageRouterTests {
router.setChannelMappings(channelMappings);
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(messageHandlingExceptionChannel.receive(1000));
assertNull(runtimeExceptionChannel.receive(0));
assertNull(illegalArgumentChannel.receive(0));
@@ -125,14 +125,14 @@ public class RootCauseErrorMessageRouterTests {
RootCauseErrorMessageRouter router = new RootCauseErrorMessageRouter();
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(defaultChannel.receive(1000));
assertNull(runtimeExceptionChannel.receive(0));
assertNull(illegalArgumentChannel.receive(0));
assertNull(messageHandlingExceptionChannel.receive(0));
}
@Test(expected=MessageHandlingException.class)
@Test(expected = MessageDeliveryException.class)
public void testNoMatchAndNoDefaultChannel() {
Message<?> failedMessage = new StringMessage("foo");
IllegalArgumentException rootCause = new IllegalArgumentException("bad argument");
@@ -145,8 +145,9 @@ public class RootCauseErrorMessageRouterTests {
channelMappings.put(MessageDeliveryException.class, messageDeliveryExceptionChannel);
router.setChannelMappings(channelMappings);
router.afterPropertiesSet();
router.setResolutionRequired(true);
router.handle(message);
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setResolutionRequired(true);
endpoint.send(message);
}
@Test
@@ -165,7 +166,7 @@ public class RootCauseErrorMessageRouterTests {
router.setChannelMappings(channelMappings);
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(illegalArgumentChannel.receive(1000));
assertNull(defaultChannel.receive(0));
assertNull(runtimeExceptionChannel.receive(0));
@@ -187,7 +188,7 @@ public class RootCauseErrorMessageRouterTests {
router.setChannelMappings(channelMappings);
router.setDefaultChannel(defaultChannel);
router.afterPropertiesSet();
router.handle(message);
router.route(message);
assertNotNull(illegalArgumentChannel.receive(1000));
assertNull(defaultChannel.receive(0));
assertNull(runtimeExceptionChannel.receive(0));

View File

@@ -0,0 +1,198 @@
/*
* Copyright 2002-2008 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.integration.router;
import static org.junit.Assert.assertFalse;
import java.util.Collections;
import java.util.List;
import org.junit.Test;
import org.springframework.integration.channel.ChannelRegistry;
import org.springframework.integration.channel.DefaultChannelRegistry;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessageDeliveryException;
import org.springframework.integration.message.MessagingException;
import org.springframework.integration.message.StringMessage;
/**
* @author Mark Fisher
*/
public class RouterEndpointTests {
@Test
public void nullChannelIgnoredByDefault() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return null;
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
Message<String> message = new StringMessage("test");
assertFalse(endpoint.send(message));
}
@Test(expected = MessageDeliveryException.class)
public void nullChannelThrowsExceptionWhenResolutionRequired() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return null;
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setResolutionRequired(true);
Message<String> message = new StringMessage("test");
endpoint.send(message);
}
@Test
public void emptyChannelListIgnoredByDefault() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return Collections.emptyList();
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
Message<String> message = new StringMessage("test");
assertFalse(endpoint.send(message));
}
@Test(expected = MessageDeliveryException.class)
public void emptyChannelListThrowsExceptionWhenResolutionRequired() {
MultiChannelResolver channelResolver = new MultiChannelResolver() {
public List<MessageChannel> resolve(Message<?> message) {
return Collections.emptyList();
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setResolutionRequired(true);
Message<String> message = new StringMessage("test");
endpoint.send(message);
}
@Test
public void nullChannelNameArrayIgnoredByDefault() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return null;
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setChannelRegistry(channelRegistry);
Message<String> message = new StringMessage("test");
assertFalse(endpoint.send(message));
}
@Test(expected = MessageDeliveryException.class)
public void nullChannelNameArrayThrowsExceptionWhenResolutionRequired() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return null;
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setChannelRegistry(channelRegistry);
endpoint.setResolutionRequired(true);
Message<String> message = new StringMessage("test");
endpoint.send(message);
}
@Test
public void emptyChannelNameArrayIgnoredByDefault() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {};
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setChannelRegistry(channelRegistry);
Message<String> message = new StringMessage("test");
assertFalse(endpoint.send(message));
}
@Test(expected = MessageDeliveryException.class)
public void emptyChannelNameArrayThrowsExceptionWhenResolutionRequired() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] {};
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.setChannelRegistry(channelRegistry);
endpoint.setResolutionRequired(true);
Message<String> message = new StringMessage("test");
endpoint.send(message);
}
@Test(expected = MessagingException.class)
public void testChannelRegistryIsRequiredWhenUsingChannelNameResolverWithSingleChannelRouter() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "notImportant";
}
};
SingleChannelRouter router = new SingleChannelRouter();
router.setChannelNameResolver(channelNameResolver);
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.send(new StringMessage("this should fail"));
}
@Test(expected = MessagingException.class)
public void testChannelRegistryIsRequiredWhenUsingChannelNameResolverWithMultiChannelRouter() {
MultiChannelNameResolver channelNameResolver = new MultiChannelNameResolver() {
public String[] resolve(Message<?> message) {
return new String[] { "notImportant" };
}
};
MultiChannelRouter router = new MultiChannelRouter();
router.setChannelNameResolver(channelNameResolver);
RouterEndpoint endpoint = new RouterEndpoint(router);
endpoint.send(new StringMessage("this should fail"));
}
}

View File

@@ -17,6 +17,7 @@
package org.springframework.integration.router;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import org.junit.Test;
@@ -27,7 +28,7 @@ import org.springframework.integration.channel.DefaultChannelRegistry;
import org.springframework.integration.channel.MessageChannel;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.message.Message;
import org.springframework.integration.message.MessageHandlingException;
import org.springframework.integration.message.MessageDeliveryException;
import org.springframework.integration.message.StringMessage;
/**
@@ -36,7 +37,7 @@ import org.springframework.integration.message.StringMessage;
public class SingleChannelRouterTests {
@Test
public void testRoutingWithChannelResolver() {
public void routeWithChannelResolver() {
final QueueChannel channel = new QueueChannel();
ChannelResolver channelResolver = new ChannelResolver() {
public MessageChannel resolve(Message<?> message) {
@@ -47,14 +48,14 @@ public class SingleChannelRouterTests {
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result = channel.receive(25);
assertNotNull(result);
assertEquals("test", result.getPayload());
}
@Test
public void testRoutingWithChannelNameResolver() {
public void routeWithChannelNameResolver() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "testChannel";
@@ -69,14 +70,14 @@ public class SingleChannelRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
Message<?> result = channel.receive(25);
assertNotNull(result);
assertEquals("test", result.getPayload());
}
@Test(expected=ConfigurationException.class)
public void testConfiguringBothChannelResolverAndChannelNameResolverIsNotAllowed() {
@Test(expected = ConfigurationException.class)
public void configuringBothChannelResolverAndChannelNameResolverIsNotAllowed() {
ChannelResolver channelResolver = new ChannelResolver() {
public MessageChannel resolve(Message<?> message) {
return new QueueChannel();
@@ -94,7 +95,7 @@ public class SingleChannelRouterTests {
}
@Test
public void testChannelResolutionFailureIgnoredByDefault() {
public void nullChannelResult() {
ChannelResolver channelResolver = new ChannelResolver() {
public MessageChannel resolve(Message<?> message) {
return null;
@@ -104,26 +105,11 @@ public class SingleChannelRouterTests {
router.setChannelResolver(channelResolver);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
assertFalse(router.route(message));
}
@Test(expected=MessageHandlingException.class)
public void testChannelResolutionFailureThrowsExceptionWhenResolutionRequired() {
ChannelResolver channelResolver = new ChannelResolver() {
public MessageChannel resolve(Message<?> message) {
return null;
}
};
SingleChannelRouter router = new SingleChannelRouter();
router.setChannelResolver(channelResolver);
router.setResolutionRequired(true);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
}
@Test
public void testChannelNameResolutionFailureIgnoredByDefault() {
@Test(expected = MessageDeliveryException.class)
public void channelNameResolutionFailure() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "noSuchChannel";
@@ -135,51 +121,10 @@ public class SingleChannelRouterTests {
router.setChannelRegistry(channelRegistry);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
router.route(message);
}
@Test(expected=MessageHandlingException.class)
public void testChannelNameResolutionFailureThrowsExceptionWhenResolutionRequired() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "noSuchChannel";
}
};
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelRouter router = new SingleChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.setChannelRegistry(channelRegistry);
router.setResolutionRequired(true);
router.afterPropertiesSet();
Message<String> message = new StringMessage("test");
router.handle(message);
}
@Test(expected=ConfigurationException.class)
public void testChannelRegistryIsRequiredWhenUsingChannelNameResolver() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "notImportant";
}
};
SingleChannelRouter router = new SingleChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.resolveChannels(new StringMessage("this should fail"));
}
@Test(expected=ConfigurationException.class)
public void testValidateChannelRegistryIsPresentWhenUsingChannelNameResolver() {
ChannelNameResolver channelNameResolver = new ChannelNameResolver() {
public String resolve(Message<?> message) {
return "notImportant";
}
};
SingleChannelRouter router = new SingleChannelRouter();
router.setChannelNameResolver(channelNameResolver);
router.afterPropertiesSet();
}
@Test(expected=ConfigurationException.class)
@Test(expected = ConfigurationException.class)
public void testChannelResolverIsRequired() {
ChannelRegistry channelRegistry = new DefaultChannelRegistry();
SingleChannelRouter router = new SingleChannelRouter();