diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathSelectorParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathSelectorParser.java index 86fe3e2c38..241f795518 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathSelectorParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathSelectorParser.java @@ -16,18 +16,18 @@ package org.springframework.integration.xml.config; -import org.w3c.dom.Element; -import org.w3c.dom.NodeList; - -import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.integration.xml.selector.BooleanTestXPathMessageSelector; import org.springframework.integration.xml.selector.StringValueTestXPathMessageSelector; import org.springframework.util.Assert; import org.springframework.util.StringUtils; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + /** * @author Jonas Partner */ @@ -57,6 +57,13 @@ public class XPathSelectorParser extends AbstractSingleBeanDefinitionParser { boolean xPathReferencePresent = StringUtils.hasText(xPathExpressionRef); Assert.isTrue(xPathExpressionChildPresent ^ xPathReferencePresent, "Exactly one of 'xpath-expression' or 'xpath-expression-ref' is required."); + if (xPathExpressionChildPresent) { + BeanDefinition beanDefinition = xpathParser.parse((Element) xPathExpressionNodes.item(0), parserContext); + builder.addConstructorArgValue(beanDefinition); + } + else { + builder.addConstructorArgReference(xPathExpressionRef); + } if (evaluationType.equals("boolean")) { builder.getBeanDefinition().setBeanClass(BooleanTestXPathMessageSelector.class); Assert.state(!StringUtils.hasText(stringTestValue), @@ -72,13 +79,6 @@ public class XPathSelectorParser extends AbstractSingleBeanDefinitionParser { throw new IllegalArgumentException("Unsupported value [" + evaluationType + "] for 'evaluation-result-type', expected boolean or string."); } - if (xPathExpressionChildPresent) { - BeanDefinition beanDefinition = xpathParser.parse((Element) xPathExpressionNodes.item(0), parserContext); - builder.addConstructorArgValue(beanDefinition); - } - else { - builder.addConstructorArgReference(xPathExpressionRef); - } } } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathSelectorParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathSelectorParserTests.java index 99e45a6cdc..1ce5c8f888 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathSelectorParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathSelectorParserTests.java @@ -44,7 +44,15 @@ public class XPathSelectorParserTests { public void testStringExpressionWithNamespaceBoolean() throws Exception { String contextXml = " "; MessageSelector selector = getSelector(contextXml); - + assertTrue(selector.accept(new GenericMessage(XmlTestUtil.getDocumentForString("outputOne")))); + assertFalse(selector.accept(new GenericMessage(XmlTestUtil.getDocumentForString("outputOne")))); + } + + @Test + public void testStringExpressionWithNamespaceString() throws Exception { + String contextXml = " "; + MessageSelector selector = getSelector(contextXml); + assertTrue(selector.accept(new GenericMessage(XmlTestUtil.getDocumentForString("outputOne")))); assertFalse(selector.accept(new GenericMessage(XmlTestUtil.getDocumentForString("outputOne")))); }