diff --git a/spring-integration-core/src/main/java/org/springframework/integration/router/PayloadTypeRouter.java b/spring-integration-core/src/main/java/org/springframework/integration/router/PayloadTypeRouter.java index d2ade7c078..c507157a25 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/router/PayloadTypeRouter.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/router/PayloadTypeRouter.java @@ -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; } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/config/PayloadTypeRouterParserTests-context.xml b/spring-integration-core/src/test/java/org/springframework/integration/router/config/PayloadTypeRouterParserTests-context.xml index 8711ac0c22..511656dc5f 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/config/PayloadTypeRouterParserTests-context.xml +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/config/PayloadTypeRouterParserTests-context.xml @@ -13,11 +13,15 @@ + + + + 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)