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:
@@ -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 };
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user