INT-1792 added support for routing arrays in PayloadTypeRouter

This commit is contained in:
Oleg Zhurakousky
2011-03-07 19:06:13 -05:00
parent 1f2f7dac04
commit 90fedfe220
3 changed files with 17 additions and 2 deletions

View File

@@ -52,8 +52,15 @@ public class PayloadTypeRouter extends AbstractMessageRouter {
private String getChannelName(Message<?> message) {
Class<?> type = message.getPayload().getClass();
while (type != null && !CollectionUtils.isEmpty(this.channelIdentifierMap)) {
// first, check for an exact type match
String channelName = this.channelIdentifierMap.get(type.getName());
String mappingName = null;
if (type.isArray()){
mappingName = type.getComponentType().getName()+"[]";
}
else {
mappingName = type.getName();
}
String channelName = this.channelIdentifierMap.get(mappingName);
if (StringUtils.hasText(channelName)) {
return channelName;
}

View File

@@ -13,11 +13,15 @@
<channel id="channel2">
<queue capacity="1" />
</channel>
<channel id="channel3">
<queue capacity="1" />
</channel>
<channel id="routingChannel" />
<payload-type-router input-channel="routingChannel">
<mapping type="java.lang.String" channel="channel1" />
<mapping type="java.lang.Integer" channel="channel2" />
<mapping type="java.lang.Integer[]" channel="channel3" />
</payload-type-router>
<gateway id="testService"

View File

@@ -53,12 +53,16 @@ public class PayloadTypeRouterParserTests {
context.start();
Message<?> message1 = MessageBuilder.withPayload("Hello").build();
Message<?> message2 = MessageBuilder.withPayload(25).build();
Message<?> message3 = MessageBuilder.withPayload(new Integer[]{23, 24, 34}).build();
testService.foo(message1);
testService.foo(message2);
testService.foo(message3);
PollableChannel chanel1 = (PollableChannel) context.getBean("channel1");
PollableChannel chanel2 = (PollableChannel) context.getBean("channel2");
PollableChannel chanel3 = (PollableChannel) context.getBean("channel3");
assertTrue(chanel1.receive(0).getPayload() instanceof String);
assertTrue(chanel2.receive(0).getPayload() instanceof Integer);
System.out.println(chanel3.receive(0).getPayload());
}
@Test(expected=BeanDefinitionStoreException.class)