OPEN - issue INT-309: XPath Message Selector

http://jira.springframework.org/browse/INT-309
Throw messaging exception if XPathSingleChannelNameResolver evaluation returns empty string
This commit is contained in:
Jonas Partner
2008-09-30 09:36:10 +00:00
parent ed96dcc58f
commit 1b4598568c
2 changed files with 20 additions and 3 deletions

View File

@@ -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 };
}
}

View File

@@ -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("<one><two><three>bob</three></two></one>");
resolver.resolveChannelNames(new GenericMessage<Node>(testDocument));
}
}