diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolver.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolver.java index 4e43bfe1ce..c7ec5fbe2d 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolver.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolver.java @@ -19,6 +19,7 @@ package org.springframework.integration.xml.router; import java.util.Map; import org.springframework.integration.message.Message; +import org.springframework.integration.message.MessagingException; import org.springframework.integration.xml.DefaultXmlPayloadConverter; import org.springframework.integration.xml.XmlPayloadConverter; import org.springframework.xml.xpath.XPathExpression; @@ -28,10 +29,10 @@ import org.w3c.dom.Node; * Evaluates the payload using {@link XPathExpression#evaluateAsString(Node)} to * extract a channel name. The payload is extracted as a node using the provided * {@link XmlPayloadConverter} with {@link DefaultXmlPayloadConverter} being the - * default + * default. * @author Jonas Partner */ -public class XPathSingleChannelNameResolver extends AbstractXPathChannelNameResolver { +public class XPathSingleChannelNameResolver extends AbstractXPathChannelNameResolver { /** * @see AbstractXPathChannelNameResolver#AbstractXPathChannelNameResolver(String, @@ -63,9 +64,17 @@ public class XPathSingleChannelNameResolver extends AbstractXPathChannelNameReso super(pathExpression); } + /** + * Evaluates the payload using {@link XPathExpression#evaluateAsString(Node)} + * @throws MessagingException if the {@link XPathExpression} evaluates to empty string + */ public String[] resolveChannelNames(Message message) { Node node = getConverter().convertToNode(message.getPayload()); - return new String[] { getXPathExpresion().evaluateAsString(node) }; + String result = getXPathExpresion().evaluateAsString(node); + if(result.equals("")){ + throw new MessagingException(message,"XPath expression evaluated to empty string"); + } + return new String[] { result }; } } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolverTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolverTests.java index d6f9157e56..e7e10d6d55 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolverTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/router/XPathSingleChannelNameResolverTests.java @@ -65,4 +65,12 @@ public class XPathSingleChannelNameResolverTests { .getElementsByTagName("two").item(0))); assertEquals("bob", channelNames[0]); } + + @Test(expected=MessagingException.class) + public void testEvaluationReturnsEmptyString() throws Exception { + XPathSingleChannelNameResolver resolver = new XPathSingleChannelNameResolver("/yellow"); + Document testDocument = XmlTestUtil.getDocumentForString("bob"); + resolver.resolveChannelNames(new GenericMessage(testDocument)); + + } }