diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterFactoryBean.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterFactoryBean.java index 2871c7dbda..c29effff9d 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterFactoryBean.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterFactoryBean.java @@ -37,10 +37,11 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { private volatile MessageChannel defaultOutputChannel; - private volatile boolean resolutionRequired; + private volatile Boolean resolutionRequired; private volatile Boolean ignoreChannelNameResolutionFailures; + public void setChannelResolver(ChannelResolver channelResolver) { this.channelResolver = channelResolver; } @@ -48,12 +49,12 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { public void setDefaultOutputChannel(MessageChannel defaultOutputChannel) { this.defaultOutputChannel = defaultOutputChannel; } - - public void setResolutionRequired(boolean resolutionRequired){ + + public void setResolutionRequired(Boolean resolutionRequired) { this.resolutionRequired = resolutionRequired; } - - public void setIgnoreChannelNameResolutionFailures(boolean ignoreChannelNameResolutionFailures){ + + public void setIgnoreChannelNameResolutionFailures(Boolean ignoreChannelNameResolutionFailures) { this.ignoreChannelNameResolutionFailures = ignoreChannelNameResolutionFailures; } @@ -64,12 +65,15 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { if (this.defaultOutputChannel != null) { router.setDefaultOutputChannel(this.defaultOutputChannel); } - if(ignoreChannelNameResolutionFailures != null ){ + if (this.ignoreChannelNameResolutionFailures != null) { Assert.isTrue(router instanceof AbstractChannelNameResolvingMessageRouter, - "Ignore channel name resolution failures can only set on rotuers extending " + AbstractChannelNameResolvingMessageRouter.class.getName()); - ((AbstractChannelNameResolvingMessageRouter)router).setIgnoreChannelNameResolutionFailures(ignoreChannelNameResolutionFailures); + "The 'ignoreChannelNameResolutionFailures' property can only be set on routers that extend " + + AbstractChannelNameResolvingMessageRouter.class.getName()); + ((AbstractChannelNameResolvingMessageRouter) router).setIgnoreChannelNameResolutionFailures(ignoreChannelNameResolutionFailures); + } + if (this.resolutionRequired != null) { + router.setResolutionRequired(this.resolutionRequired); } - router.setResolutionRequired(resolutionRequired); return router; } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests-context.xml b/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests-context.xml new file mode 100644 index 0000000000..66349c6a6e --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests-context.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests.java new file mode 100644 index 0000000000..e2195b4100 --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/config/RouterFactoryBeanDelegationTests.java @@ -0,0 +1,77 @@ +/* + * Copyright 2002-2009 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.config; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import org.springframework.beans.DirectFieldAccessor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.integration.channel.PollableChannel; +import org.springframework.integration.core.MessageChannel; +import org.springframework.integration.message.GenericMessage; +import org.springframework.integration.message.StringMessage; +import org.springframework.integration.router.AbstractMessageRouter; +import org.springframework.test.context.ContextConfiguration; +import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; + +/** + * @author Mark Fisher + */ +@RunWith(SpringJUnit4ClassRunner.class) +@ContextConfiguration +public class RouterFactoryBeanDelegationTests { + + @Autowired @Qualifier("input") + private MessageChannel input; + + @Autowired @Qualifier("strings") + private PollableChannel strings; + + @Autowired @Qualifier("discard") + private PollableChannel discard; + + @Autowired @Qualifier("org.springframework.integration.config.RouterFactoryBean#0") + private AbstractMessageRouter router; + + + @Test + public void checkResolutionRequiredConfiguredOnTargetRouter() { + boolean resolutionRequired = (Boolean) new DirectFieldAccessor(router).getPropertyValue("resolutionRequired"); + assertTrue("The 'resolutionRequired' property should be 'true'", resolutionRequired); + } + + @Test + public void routeWithMappedType() { + input.send(new StringMessage("test")); + assertNull(discard.receive(0)); + assertNotNull(strings.receive(0)); + } + + @Test + public void routeWithUnmappedType() { + input.send(new GenericMessage(123)); + assertNull(strings.receive(0)); + assertNotNull(discard.receive(0)); + } + +}