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