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"))));
}