The router hierarchy abstract method names are now 'determineTargetChannel', 'determineTargetChannelNames', etc (instead of "resolve..."). This clarifies the distinction between the target channel decision and the resolution of a channel *name* to a channel instance. The latter is now the responsibility of a ChannelResolver strategy, and all subclasses of AbstractChannelNameResolvingMessageRouter now delegate to a ChannelResolver after 'determineTargetChannelNames' has returned the channel name(s). In most cases, it will be a BeanFactoryChannelResolver.

This commit is contained in:
Mark Fisher
2008-10-12 17:58:36 +00:00
parent 0754889c5c
commit b34e416093
19 changed files with 71 additions and 59 deletions

View File

@@ -39,7 +39,7 @@ public class XPathRouterParserTests {
TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext(
"<si-xml:xpath-router id='router'><si-xml:xpath-expression expression='/name'/></si-xml:xpath-router>");
XPathSingleChannelRouter router = (XPathSingleChannelRouter) ctx.getBean("router");
String[] channelNames = router.resolveChannelNames(docMessage);
String[] channelNames = router.determineTargetChannelNames(docMessage);
assertEquals("Wrong number of channel names returned", 1, channelNames.length);
assertEquals("Wrong channel name", "outputOne", channelNames[0]);
}
@@ -51,7 +51,7 @@ public class XPathRouterParserTests {
TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext(
"<si-xml:xpath-router id='router'><si-xml:xpath-expression expression='/ns2:name' ns-prefix='ns2' ns-uri='www.example.org' /></si-xml:xpath-router>");
XPathSingleChannelRouter router = (XPathSingleChannelRouter) ctx.getBean("router");
String[] channelNames = router.resolveChannelNames(docMessage);
String[] channelNames = router.determineTargetChannelNames(docMessage);
assertEquals("Wrong number of channel names returned", 1, channelNames.length);
assertEquals("Wrong channel name", "outputOne", channelNames[0]);
}
@@ -67,7 +67,7 @@ public class XPathRouterParserTests {
buffer.append("</si-xml:xpath-expression></si-xml:xpath-router>");
TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext(buffer.toString());
XPathSingleChannelRouter router = (XPathSingleChannelRouter) ctx.getBean("router");
String[] channelNames = router.resolveChannelNames(docMessage);
String[] channelNames = router.determineTargetChannelNames(docMessage);
assertEquals("Wrong number of channel names returned", 1, channelNames.length);
assertEquals("Wrong channel name", "outputOne", channelNames[0]);
}
@@ -83,7 +83,7 @@ public class XPathRouterParserTests {
buffer.append("<util:map id='nsMap'><entry key='ns1' value='www.example.org' /><entry key='ns2' value='www.example.org2' /></util:map>");
TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext(buffer.toString());
XPathSingleChannelRouter router = (XPathSingleChannelRouter) ctx.getBean("router");
String[] channelNames = router.resolveChannelNames(docMessage);
String[] channelNames = router.determineTargetChannelNames(docMessage);
assertEquals("Wrong number of channel names returned", 1, channelNames.length);
assertEquals("Wrong channel name", "outputOne", channelNames[0]);
}

View File

@@ -89,7 +89,7 @@ public class XsltPayloadTransformerParserTests {
}
@Test
public void testWithResourceProvidedndStubResultFactory() throws Exception {
public void testWithResourceProvidedAndStubResultFactory() throws Exception {
MessageChannel input = (MessageChannel) applicationContext.getBean("withTemplatesAndResultFactoryIn");
GenericMessage<Object> message = new GenericMessage<Object>(XmlTestUtil.getDomSourceForString(doc));
input.send(message);

View File

@@ -36,22 +36,22 @@ public class XPathMultiChannelRouterTests {
@Test
@SuppressWarnings("unchecked")
public void testSimpleSingleeAttribute() throws Exception {
public void simpleSingleAttribute() throws Exception {
Document doc = XmlTestUtil.getDocumentForString("<doc type=\"one\" />");
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/@type");
XPathMultiChannelRouter router = new XPathMultiChannelRouter(expression);
String[] channelNames = router.resolveChannelNames(new GenericMessage(doc));
String[] channelNames = router.determineTargetChannelNames(new GenericMessage(doc));
assertEquals("Wrong number of channels returned", 1, channelNames.length);
assertEquals("Wrong channel name", "one", channelNames[0]);
}
@Test
@SuppressWarnings("unchecked")
public void testMultipleNodeValues() throws Exception {
public void multipleNodeValues() throws Exception {
Document doc = XmlTestUtil.getDocumentForString("<doc type=\"one\"><book>bOne</book><book>bTwo</book></doc>");
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/book");
XPathMultiChannelRouter router = new XPathMultiChannelRouter(expression);
String[] channelNames = router.resolveChannelNames(new GenericMessage(doc));
String[] channelNames = router.determineTargetChannelNames(new GenericMessage(doc));
assertEquals("Wrong number of channels returned", 2, channelNames.length);
assertEquals("Wrong channel name", "bOne", channelNames[0]);
assertEquals("Wrong channel name", "bTwo", channelNames[1]);
@@ -59,27 +59,27 @@ public class XPathMultiChannelRouterTests {
@Test
@SuppressWarnings("unchecked")
public void testMultipleNodeValuesAsString() throws Exception {
public void multipleNodeValuesAsString() throws Exception {
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/book");
XPathMultiChannelRouter router = new XPathMultiChannelRouter(expression);
String[] channelNames = router.resolveChannelNames(new GenericMessage("<doc type=\"one\"><book>bOne</book><book>bTwo</book></doc>"));
String[] channelNames = router.determineTargetChannelNames(new GenericMessage("<doc type=\"one\"><book>bOne</book><book>bTwo</book></doc>"));
assertEquals("Wrong number of channels returned", 2, channelNames.length);
assertEquals("Wrong channel name", "bOne", channelNames[0]);
assertEquals("Wrong channel name", "bTwo", channelNames[1]);
}
@Test(expected = MessagingException.class)
public void testNonNodePayload() throws Exception {
public void nonNodePayload() throws Exception {
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/@type");
XPathMultiChannelRouter router = new XPathMultiChannelRouter(expression);
router.resolveChannelNames(new StringMessage("test"));
router.determineTargetChannelNames(new StringMessage("test"));
}
@Test
public void testNodePayload() throws Exception {
public void nodePayload() throws Exception {
XPathMultiChannelRouter router = new XPathMultiChannelRouter("./three/text()");
Document testDocument = XmlTestUtil.getDocumentForString("<one><two><three>bob</three><three>dave</three></two></one>");
String[] channelNames = router.resolveChannelNames(new GenericMessage<Node>(testDocument.getElementsByTagName("two").item(0)));
String[] channelNames = router.determineTargetChannelNames(new GenericMessage<Node>(testDocument.getElementsByTagName("two").item(0)));
assertEquals("bob",channelNames[0]);
assertEquals("dave",channelNames[1]);
}

View File

@@ -39,7 +39,7 @@ public class XPathSingleChannelRouterTests {
Document doc = XmlTestUtil.getDocumentForString("<doc type='one' />");
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/@type");
XPathSingleChannelRouter router = new XPathSingleChannelRouter(expression);
String channelName = router.resolveChannelNames(new GenericMessage<Document>(doc))[0];
String channelName = router.determineTargetChannelNames(new GenericMessage<Document>(doc))[0];
assertEquals("Wrong channel name", "one", channelName);
}
@@ -47,7 +47,7 @@ public class XPathSingleChannelRouterTests {
public void testSimpleStringDoc() throws Exception {
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/@type");
XPathSingleChannelRouter router = new XPathSingleChannelRouter(expression);
String channelName = router.resolveChannelNames(new GenericMessage<String>("<doc type='one' />"))[0];
String channelName = router.determineTargetChannelNames(new GenericMessage<String>("<doc type='one' />"))[0];
assertEquals("Wrong channel name", "one", channelName);
}
@@ -55,14 +55,14 @@ public class XPathSingleChannelRouterTests {
public void testNonNodePayload() throws Exception {
XPathExpression expression = XPathExpressionFactory.createXPathExpression("/doc/@type");
XPathSingleChannelRouter router = new XPathSingleChannelRouter(expression);
router.resolveChannelNames(new StringMessage("test"));
router.determineTargetChannelNames(new StringMessage("test"));
}
@Test
public void testNodePayload() throws Exception {
XPathSingleChannelRouter router = new XPathSingleChannelRouter("./three/text()");
Document testDocument = XmlTestUtil.getDocumentForString("<one><two><three>bob</three></two></one>");
String[] channelNames = router.resolveChannelNames(new GenericMessage<Node>(
String[] channelNames = router.determineTargetChannelNames(new GenericMessage<Node>(
testDocument.getElementsByTagName("two").item(0)));
assertEquals("bob", channelNames[0]);
}
@@ -71,7 +71,7 @@ public class XPathSingleChannelRouterTests {
public void testEvaluationReturnsEmptyString() throws Exception {
XPathSingleChannelRouter router = new XPathSingleChannelRouter("/yellow");
Document testDocument = XmlTestUtil.getDocumentForString("<one><two><three>bob</three></two></one>");
router.resolveChannelNames(new GenericMessage<Node>(testDocument));
router.determineTargetChannelNames(new GenericMessage<Node>(testDocument));
}
}