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));
+ }
+
+}