From 3a1bd0fdcde519964343960d1995b2f043aeb23c Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Tue, 8 Mar 2011 07:39:24 -0500 Subject: [PATCH] INT-1792 added support for sub-types of an array type to the PayloadTypeRouter --- .../integration/router/PayloadTypeRouter.java | 8 ++++++-- .../config/PayloadTypeRouterParserTests-context.xml | 6 +++++- .../router/config/PayloadTypeRouterParserTests.java | 6 +++++- 3 files changed, 16 insertions(+), 4 deletions(-) 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 c507157a25..dc3b0404da 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 @@ -51,11 +51,15 @@ public class PayloadTypeRouter extends AbstractMessageRouter { private String getChannelName(Message message) { Class type = message.getPayload().getClass(); + boolean array = type.isArray(); + if (array){ + type = type.getComponentType(); + } while (type != null && !CollectionUtils.isEmpty(this.channelIdentifierMap)) { String mappingName = null; - if (type.isArray()){ - mappingName = type.getComponentType().getName()+"[]"; + if (array){ + mappingName = type.getName()+"[]"; } else { mappingName = type.getName(); 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 511656dc5f..41a7d2edc3 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 @@ -16,12 +16,16 @@ + + + - + + message1 = MessageBuilder.withPayload("Hello").build(); Message message2 = MessageBuilder.withPayload(25).build(); Message message3 = MessageBuilder.withPayload(new Integer[]{23, 24, 34}).build(); + Message message4 = MessageBuilder.withPayload(new Long[]{23L, 24L, 34L}).build(); testService.foo(message1); testService.foo(message2); testService.foo(message3); + testService.foo(message4); PollableChannel chanel1 = (PollableChannel) context.getBean("channel1"); PollableChannel chanel2 = (PollableChannel) context.getBean("channel2"); PollableChannel chanel3 = (PollableChannel) context.getBean("channel3"); + PollableChannel chanel4 = (PollableChannel) context.getBean("channel4"); assertTrue(chanel1.receive(0).getPayload() instanceof String); assertTrue(chanel2.receive(0).getPayload() instanceof Integer); - System.out.println(chanel3.receive(0).getPayload()); + assertTrue(chanel3.receive(0).getPayload().getClass().isArray()); + assertTrue(chanel4.receive(0).getPayload().getClass().isArray()); } @Test(expected=BeanDefinitionStoreException.class)