diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java index 3ad4a5c10a..4078de8c19 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java @@ -54,6 +54,7 @@ public class XPathRouterParser extends AbstractConsumerEndpointParser { String xPathExpressionRef = element.getAttribute("xpath-expression-ref"); String channelResolver = element.getAttribute("channel-resolver"); String resolutionRequired = element.getAttribute("resolution-required"); + String defaultOutputChannel = element.getAttribute("default-output-channel"); NodeList xPathExpressionNodes = element.getElementsByTagNameNS( element.getNamespaceURI(), "xpath-expression"); @@ -87,6 +88,9 @@ public class XPathRouterParser extends AbstractConsumerEndpointParser { builder.addPropertyReference("channelResolver", channelResolver); } + if(StringUtils.hasText(defaultOutputChannel)){ + builder.addPropertyReference("defaultOutputChannel", defaultOutputChannel); + } return builder; } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd index 9bc81e7998..5f05a58394 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd @@ -189,6 +189,16 @@ + + + + + + + + + diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java index 233c24d874..b1b21890f0 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java @@ -29,6 +29,7 @@ import org.springframework.integration.channel.QueueChannel; import org.springframework.integration.core.MessageChannel; import org.springframework.integration.endpoint.EventDrivenConsumer; import org.springframework.integration.message.GenericMessage; +import org.springframework.integration.message.MessageBuilder; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.test.context.ContextConfiguration; import org.w3c.dom.Document; @@ -39,7 +40,8 @@ import org.w3c.dom.Document; @ContextConfiguration public class XPathRouterParserTests { - String channelConfig = " "; + String channelConfig = " " + + ""; @Autowired @Qualifier("test-input") MessageChannel inputChannel; @@ -47,6 +49,10 @@ public class XPathRouterParserTests { @Autowired @Qualifier("outputOne") QueueChannel outputChannel; + @Autowired @Qualifier("defaultOutput") + QueueChannel defaultOutput; + + ConfigurableApplicationContext appContext; public EventDrivenConsumer buildContext(String routerDef){ @@ -154,4 +160,18 @@ public class XPathRouterParserTests { assertEquals("Resolution required not set to true ", true, resolutionRequired); } + + @Test + public void testSetDefaultOutputChannel() throws Exception { + StringBuffer contextBuffer = new StringBuffer(""); + EventDrivenConsumer consumer = buildContext(contextBuffer.toString()); + + DirectFieldAccessor accessor = new DirectFieldAccessor(consumer); + Object handler = accessor.getPropertyValue("handler"); + accessor = new DirectFieldAccessor(handler); + Object defaultOutputChannelValue = accessor.getPropertyValue("defaultOutputChannel"); + assertEquals("Default output channel not correctly set ", defaultOutput, defaultOutputChannelValue); + inputChannel.send(MessageBuilder.withPayload("").build()); + assertEquals("Wrong count of messages on default output channel",1, defaultOutput.getMesssageCount()); + } }