From 928f38f315f6c1c3cc82bd91519ac23dac7a0124 Mon Sep 17 00:00:00 2001 From: Oleg Zhurakousky Date: Fri, 3 Dec 2010 11:36:49 -0500 Subject: [PATCH] INT-1659 exposed 'evaluate-as-node' attribute via the namespace, added tests --- .../integration/xml/config/XPathRouterParser.java | 2 ++ .../xml/config/spring-integration-xml-2.0.xsd | 12 ++++++++++++ .../xml/config/XPathRouterParserTests.java | 11 +++++++++++ .../xml/config/XPathRouterTests-context.xml | 6 +++++- 4 files changed, 30 insertions(+), 1 deletion(-) 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 @@ + + + + - +