From 5fae7d2a1fe9048ff159986f5a0362440eba2ff2 Mon Sep 17 00:00:00 2001 From: Mark Fisher Date: Tue, 20 Dec 2011 17:05:25 -0500 Subject: [PATCH] fixed RouterFactoryBean --- .../integration/config/RouterFactoryBean.java | 19 +++++++---- .../router/config/RfbFixRouter.java | 34 +++++++++++++++++++ .../router/config/RouterParserTests.java | 5 +++ .../router/config/rfb-fix-config.xml | 13 +++++++ 4 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/router/config/RfbFixRouter.java create mode 100644 spring-integration-core/src/test/java/org/springframework/integration/router/config/rfb-fix-config.xml diff --git a/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java b/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java index 757620e339..41f691e096 100644 --- a/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java +++ b/spring-integration-core/src/main/java/org/springframework/integration/config/RouterFactoryBean.java @@ -22,6 +22,7 @@ import org.springframework.expression.Expression; import org.springframework.integration.MessageChannel; import org.springframework.integration.core.MessageHandler; import org.springframework.integration.router.AbstractMappingMessageRouter; +import org.springframework.integration.router.AbstractMessageRouter; import org.springframework.integration.router.ExpressionEvaluatingRouter; import org.springframework.integration.router.MethodInvokingRouter; import org.springframework.integration.support.channel.ChannelResolver; @@ -86,7 +87,7 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean @Override MessageHandler createMethodInvokingHandler(Object targetObject, String targetMethodName) { Assert.notNull(targetObject, "target object must not be null"); - AbstractMappingMessageRouter router = this.extractTypeIfPossible(targetObject, AbstractMappingMessageRouter.class); + AbstractMessageRouter router = this.extractTypeIfPossible(targetObject, AbstractMessageRouter.class); if (router == null) { router = this.createMethodInvokingRouter(targetObject, targetMethodName); this.configureRouter(router); @@ -114,10 +115,7 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean return router; } - private AbstractMappingMessageRouter configureRouter(AbstractMappingMessageRouter router) { - if (this.channelMappings != null) { - router.setChannelMappings(this.channelMappings); - } + private AbstractMessageRouter configureRouter(AbstractMessageRouter router) { if (this.defaultOutputChannel != null) { router.setDefaultOutputChannel(this.defaultOutputChannel); } @@ -130,6 +128,16 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean if (this.ignoreSendFailures != null) { router.setIgnoreSendFailures(this.ignoreSendFailures); } + if (router instanceof AbstractMappingMessageRouter) { + this.configureMappingRouter((AbstractMappingMessageRouter) router); + } + return router; + } + + private void configureMappingRouter(AbstractMappingMessageRouter router) { + if (this.channelMappings != null) { + router.setChannelMappings(this.channelMappings); + } if (this.resolutionRequired != null) { router.setResolutionRequired(this.resolutionRequired); } @@ -137,7 +145,6 @@ public class RouterFactoryBean extends AbstractStandardMessageHandlerFactoryBean logger.warn("'channel-resolver' attribute has been deprecated in favor of using SpEL via 'expression' attribute"); router.setChannelResolver(this.channelResolver); } - return router; } } diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/config/RfbFixRouter.java b/spring-integration-core/src/test/java/org/springframework/integration/router/config/RfbFixRouter.java new file mode 100644 index 0000000000..9cab411d8c --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/config/RfbFixRouter.java @@ -0,0 +1,34 @@ +/* + * Copyright 2002-2011 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.router.config; + +import java.util.Collection; + +import org.springframework.integration.Message; +import org.springframework.integration.MessageChannel; +import org.springframework.integration.router.AbstractMessageRouter; + +/** + * @author Oleg Zhurakousky + */ +public class RfbFixRouter extends AbstractMessageRouter { + + @Override + protected Collection determineTargetChannels(Message message) { + return null; + } +} diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/config/RouterParserTests.java b/spring-integration-core/src/test/java/org/springframework/integration/router/config/RouterParserTests.java index 6f3ed419b7..aa13de4f47 100644 --- a/spring-integration-core/src/test/java/org/springframework/integration/router/config/RouterParserTests.java +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/config/RouterParserTests.java @@ -178,6 +178,11 @@ public class RouterParserTests { verify(handler, times(1)).handleMessage(Mockito.any(Message.class)); } + @Test // should not fail + public void routerFactoryBeanTest(){ + new ClassPathXmlApplicationContext("rfb-fix-config.xml", this.getClass()); + } + public static class NonExistingChannelRouter{ public String route(String payload){ return "foo"; diff --git a/spring-integration-core/src/test/java/org/springframework/integration/router/config/rfb-fix-config.xml b/spring-integration-core/src/test/java/org/springframework/integration/router/config/rfb-fix-config.xml new file mode 100644 index 0000000000..b46da4c78f --- /dev/null +++ b/spring-integration-core/src/test/java/org/springframework/integration/router/config/rfb-fix-config.xml @@ -0,0 +1,13 @@ + + + + + + + + + +