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 c29effff9d..b6cef08b03 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * 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. @@ -36,7 +36,9 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { private volatile ChannelResolver channelResolver; private volatile MessageChannel defaultOutputChannel; - + + private volatile Long timeout; + private volatile Boolean resolutionRequired; private volatile Boolean ignoreChannelNameResolutionFailures; @@ -50,6 +52,10 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { this.defaultOutputChannel = defaultOutputChannel; } + public void setTimeout(Long timeout) { + this.timeout = timeout; + } + public void setResolutionRequired(Boolean resolutionRequired) { this.resolutionRequired = resolutionRequired; } @@ -65,6 +71,9 @@ public class RouterFactoryBean extends AbstractMessageHandlerFactoryBean { if (this.defaultOutputChannel != null) { router.setDefaultOutputChannel(this.defaultOutputChannel); } + if (this.timeout != null) { + router.setTimeout(timeout.longValue()); + } if (this.ignoreChannelNameResolutionFailures != null) { Assert.isTrue(router instanceof AbstractChannelNameResolvingMessageRouter, "The 'ignoreChannelNameResolutionFailures' property can only be set on routers that extend " diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractRouterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractRouterParser.java index 7cd4207677..7f1ab08077 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractRouterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/xml/AbstractRouterParser.java @@ -33,6 +33,7 @@ public abstract class AbstractRouterParser extends AbstractConsumerEndpointParse BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition( IntegrationNamespaceUtils.BASE_PACKAGE + ".config.RouterFactoryBean"); IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "default-output-channel"); + IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "timeout"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "resolution-required"); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "ignore-channel-name-resolution-failures"); this.parseRouter(element, builder, parserContext); diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/router/config/RouterParserTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/router/config/RouterParserTests.java index 58932e48c0..a460a63711 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/router/config/RouterParserTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/router/config/RouterParserTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2008 the original author or authors. + * 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. @@ -24,8 +24,11 @@ import java.util.Collection; import java.util.Collections; import org.junit.Test; + +import org.springframework.beans.DirectFieldAccessor; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.integration.annotation.Router; +import org.springframework.integration.channel.MessageChannelTemplate; import org.springframework.integration.channel.PollableChannel; import org.springframework.integration.core.Message; import org.springframework.integration.core.MessageChannel; @@ -33,6 +36,7 @@ import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.MessageDeliveryException; import org.springframework.integration.message.StringMessage; import org.springframework.integration.router.AbstractMessageRouter; +import org.springframework.integration.router.MethodInvokingRouter; /** * @author Mark Fisher @@ -109,7 +113,6 @@ public class RouterParserTests { input.send(new GenericMessage(3)); } - @Test public void testIgnoreChannelNameResolutionFailures() { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( @@ -119,6 +122,19 @@ public class RouterParserTests { input.send(new StringMessage("channelThatDoesNotExist")); } + @Test + public void timeoutValueConfigured() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "routerParserTests.xml", this.getClass()); + DirectFieldAccessor endpointAccessor = new DirectFieldAccessor(context.getBean("routerWithTimeout")); + MethodInvokingRouter router = (MethodInvokingRouter) endpointAccessor.getPropertyValue("handler"); + MessageChannelTemplate template = (MessageChannelTemplate) + new DirectFieldAccessor(router).getPropertyValue("channelTemplate"); + Long timeout = (Long) new DirectFieldAccessor(template).getPropertyValue("sendTimeout"); + assertEquals(new Long(1234), timeout); + } + + public static class TestRouterImplementation extends AbstractMessageRouter { private final MessageChannel channel; diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/router/config/routerParserTests.xml b/org.springframework.integration/src/test/java/org/springframework/integration/router/config/routerParserTests.xml index bbb4f4a457..a594cbcb35 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/router/config/routerParserTests.xml +++ b/org.springframework.integration/src/test/java/org/springframework/integration/router/config/routerParserTests.xml @@ -62,6 +62,8 @@ - + + +