diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractEndpointParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractEndpointParser.java index 84e4fb1245..5027d0ed05 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractEndpointParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/AbstractEndpointParser.java @@ -106,6 +106,7 @@ public abstract class AbstractEndpointParser extends AbstractSingleBeanDefinitio ManagedList interceptors = parser.parseInterceptors(interceptorsElement, parserContext); builder.addPropertyValue("interceptors", interceptors); } + this.postProcess(element, parserContext, builder); } private String parseAdapter(String ref, String method, Element element, ParserContext parserContext) { @@ -118,6 +119,12 @@ public abstract class AbstractEndpointParser extends AbstractSingleBeanDefinitio return adapterBeanName; } + /** + * Subclasses may implement this method to provide additional configuration. + */ + protected void postProcess(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + } + protected abstract Class getEndpointClass(); protected abstract Class getMethodInvokingAdapterClass(); diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterParser.java index b74522d9df..8aacf80681 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/RouterParser.java @@ -16,6 +16,10 @@ package org.springframework.integration.config; +import org.w3c.dom.Element; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.ParserContext; import org.springframework.integration.endpoint.MessageEndpoint; import org.springframework.integration.router.MethodInvokingChannelResolver; import org.springframework.integration.router.RouterEndpoint; @@ -37,4 +41,9 @@ public class RouterParser extends AbstractEndpointParser { return MethodInvokingChannelResolver.class; } + @Override + protected void postProcess(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "default-output-channel"); + } + } diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd b/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd index 8a5f1d5cd4..2d151d976e 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd +++ b/org.springframework.integration/src/main/java/org/springframework/integration/config/spring-integration-core-1.0.xsd @@ -333,12 +333,19 @@ - + Defines a Router. + + + + + + + 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 566d4ea1d1..99ed814353 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 @@ -50,4 +50,20 @@ public class RouterParserTests { assertNull(output1.receive(0)); } + @Test + public void testRouterWithDefaultOutputChannel() { + ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( + "routerParserTests.xml", this.getClass()); + context.start(); + MessageChannel input = (MessageChannel) context.getBean("inputForRouterWithDefaultOutput"); + PollableChannel output1 = (PollableChannel) context.getBean("output1"); + PollableChannel output2 = (PollableChannel) context.getBean("output2"); + PollableChannel defaultOutput = (PollableChannel) context.getBean("defaultOutput"); + input.send(new StringMessage("99")); + assertNull(output1.receive(0)); + assertNull(output2.receive(0)); + Message result = defaultOutput.receive(0); + assertEquals("99", result.getPayload()); + } + } 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 739748c331..ba29f2be61 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 @@ -11,6 +11,8 @@ + + @@ -19,8 +21,16 @@ + + + + + +