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