diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java index 8a56a52aa2..d950002bbd 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathMessageSplitterParser.java @@ -18,8 +18,8 @@ package org.springframework.integration.xml.config; import org.springframework.beans.factory.config.BeanDefinition; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; +import org.springframework.integration.config.xml.AbstractConsumerEndpointParser; import org.springframework.integration.xml.splitter.XPathMessageSplitter; import org.springframework.util.Assert; import org.springframework.util.StringUtils; @@ -29,12 +29,8 @@ import org.w3c.dom.NodeList; /** * @author Jonas Partner */ -public class XPathMessageSplitterParser extends AbstractSingleBeanDefinitionParser { +public class XPathMessageSplitterParser extends AbstractConsumerEndpointParser { - @Override - protected Class getBeanClass(Element element) { - return XPathMessageSplitter.class; - } private XPathExpressionParser xpathParser = new XPathExpressionParser(); @@ -48,10 +44,10 @@ public class XPathMessageSplitterParser extends AbstractSingleBeanDefinitionPars return true; } - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - boolean multiChannel = Boolean.parseBoolean(element.getAttribute("multi-channel")); + @Override + protected BeanDefinitionBuilder parseConsumer(Element element, ParserContext parserContext) { + BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(XPathMessageSplitter.class); String xPathExpressionRef = element.getAttribute("xpath-expression-ref"); NodeList xPathExpressionNodes = element.getElementsByTagNameNS(element.getNamespaceURI(), "xpath-expression"); @@ -69,6 +65,7 @@ public class XPathMessageSplitterParser extends AbstractSingleBeanDefinitionPars } else { builder.addConstructorArgReference(xPathExpressionRef); } + return builder; } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd index 27fbdb0d40..c804a9c91d 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd @@ -3,11 +3,13 @@ xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:beans="http://www.springframework.org/schema/beans" xmlns:tool="http://www.springframework.org/schema/tool" + xmlns:si-core="http://www.springframework.org/schema/integration" targetNamespace="http://www.springframework.org/schema/integration/xml" elementFormDefault="qualified" attributeFormDefault="unqualified"> + @@ -16,14 +18,14 @@ - + Defines an XML marshalling transformer. - + @@ -48,7 +50,7 @@ - + @@ -63,7 +65,7 @@ - + @@ -142,28 +144,36 @@ + Defines an XPath splitter. - - - - - - - + + + + + + + + + + - + + + + + \ No newline at end of file diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/TestXmlApplicationContextHelper.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/TestXmlApplicationContextHelper.java index 3d3154bb50..ed50ea040f 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/TestXmlApplicationContextHelper.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/TestXmlApplicationContextHelper.java @@ -28,14 +28,18 @@ public class TestXmlApplicationContextHelper { + "xmlns:si-xml='http://www.springframework.org/schema/integration/xml' " + "xmlns:si='http://www.springframework.org/schema/integration' " + "xmlns:util='http://www.springframework.org/schema/util' " - + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + "xsi:schemaLocation=" + + "xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' " + + "xmlns:context='http://www.springframework.org/schema/context' " + + "xsi:schemaLocation=" + "'http://www.springframework.org/schema/beans " + "http://www.springframework.org/schema/beans/spring-beans.xsd " + "http://www.springframework.org/schema/integration " + "http://www.springframework.org/schema/integration/spring-integration-1.0.xsd " + "http://www.springframework.org/schema/integration/xml " + "http://www.springframework.org/schema/integration/xml/spring-integration-xml-1.0.xsd " - + "http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd' >"; + + "http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd " + + "http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd' >" + + ""; private final static String footer = ""; diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java index 8e2a401379..13a5e32c98 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XPathMessageSplitterParserTests.java @@ -19,9 +19,13 @@ package org.springframework.integration.xml.config; import static org.junit.Assert.assertEquals; import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.config.AutowireCapableBeanFactory; +import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.endpoint.SubscribingConsumerEndpoint; import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.xml.splitter.XPathMessageSplitter; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.test.context.ContextConfiguration; import org.w3c.dom.Document; @@ -31,20 +35,30 @@ import org.w3c.dom.Document; */ @ContextConfiguration public class XPathMessageSplitterParserTests { + + String channelDefinitions = ""; - + @Autowired @Qualifier("test-input") + MessageChannel inputChannel; + + @Autowired @Qualifier("test-output") + QueueChannel outputChannel; + @Test public void testSimpleStringExpression() throws Exception { Document doc = XmlTestUtil.getDocumentForString("BobJohn"); GenericMessage docMessage = new GenericMessage(doc); - TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext(""); - XPathMessageSplitter splitter = (XPathMessageSplitter) ctx.getBean("splitter"); + TestXmlApplicationContext ctx = TestXmlApplicationContextHelper.getTestAppContext( channelDefinitions + ""); - QueueChannel queueChannel = new QueueChannel(10); - splitter.setOutputChannel(queueChannel); - splitter.onMessage(docMessage); - assertEquals("Wrong number of split messages ", 2, queueChannel.getMesssageCount()); + SubscribingConsumerEndpoint sce = (SubscribingConsumerEndpoint)ctx.getBean("splitter"); + sce.start(); + + ctx.getAutowireCapableBeanFactory().autowireBeanProperties(this, AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, false); + + inputChannel.send(docMessage); + Thread.sleep(5000); + assertEquals("Wrong number of split messages ", 2, outputChannel.getMesssageCount()); }