diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java
index e36f3daebe..33a09013e3 100644
--- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java
+++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java
@@ -23,6 +23,7 @@ import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractRouterParser;
+import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
@@ -46,6 +47,7 @@ public class XPathRouterParser extends AbstractRouterParser {
element.getNamespaceURI(), "xpath-expression");
Assert.isTrue(xPathExpressionNodes.getLength() <= 1, "At most one xpath-expression child may be specified.");
String xPathExpressionRef = element.getAttribute("xpath-expression-ref");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(xpathRouterBuilder, element, "evaluate-as-node");
boolean xPathExpressionChildPresent = (xPathExpressionNodes.getLength() == 1);
boolean xPathReferencePresent = StringUtils.hasText(xPathExpressionRef);
Assert.isTrue(xPathExpressionChildPresent ^ xPathReferencePresent,
diff --git a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
index b8b0836c3b..6dc663f50a 100644
--- a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
+++ b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
@@ -369,6 +369,18 @@
+
+
+ of channel names, thus handling single channel scenarios as well as multiple.
+ However certain XPath expressions may evaluate as String type from the very
+ beginning (e.g., 'name(./node())' - which will return the name of the root node) thus resulting in
+ the exception if default evaluation type (NODESET) is used. This flag will allow you to manage the
+ evaluation type. It is TRUE by default, however if set to FALSE, the String evaluation type will be used.
+ ]]>
+
+
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java
index 7f972da868..768d9f1688 100644
--- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterParserTests.java
@@ -265,5 +265,16 @@ public class XPathRouterParserTests {
assertNotNull(channelA.receive(10));
assertNotNull(channelB.receive(10));
}
+ @Test
+ public void testWithStringEvaluationType() throws Exception {
+ ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("XPathRouterTests-context.xml", this.getClass());
+ MessageChannel inputChannel = ac.getBean("xpathStringChannel", MessageChannel.class);
+ PollableChannel channelA = ac.getBean("channelA", PollableChannel.class);
+ Document doc = XmlTestUtil.getDocumentForString("");
+ GenericMessage docMessage = new GenericMessage(doc);
+ inputChannel.send(docMessage);
+ assertNotNull(channelA.receive(10));
+
+ }
}
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml
index a6635ee746..6d7c19afb7 100644
--- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/config/XPathRouterTests-context.xml
@@ -12,13 +12,17 @@
+
+
+
+
-
+