diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java index e6d26c5950..1513e4dae4 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParser.java @@ -18,26 +18,26 @@ package org.springframework.integration.xml.config; import javax.xml.parsers.ParserConfigurationException; +import org.w3c.dom.Element; + import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser; import org.springframework.integration.xml.result.DomResultFactory; import org.springframework.integration.xml.result.StringResultFactory; import org.springframework.integration.xml.transformer.XmlPayloadMarshallingTransformer; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; /** * @author Jonas Partner * @author Mark Fisher */ -public class XmlMarshallingTransformerParser extends - AbstractPayloadTransformerParser { +public class XmlMarshallingTransformerParser extends AbstractPayloadTransformerParser { @Override - protected Class> getTransformerClass() { + protected Class> getTransformerClass() { return XmlPayloadMarshallingTransformer.class; } @@ -47,7 +47,6 @@ public class XmlMarshallingTransformerParser extends String resultFactory = element.getAttribute("result-factory"); String marshaller = element.getAttribute("marshaller"); String resultTransformer = element.getAttribute("result-transformer"); - Assert.hasText(marshaller, "the 'marshaller' attribute is required"); Assert.hasText(resultFactory, "the 'result-factory' attribute is required"); @@ -55,20 +54,18 @@ public class XmlMarshallingTransformerParser extends if(StringUtils.hasText(resultTransformer)){ builder.addConstructorArgReference(resultTransformer); } - if (resultFactory.equals("DOMResult")) { try { - builder.addPropertyValue("resultFactory", - new DomResultFactory()); - - } catch (ParserConfigurationException e) { + builder.addPropertyValue("resultFactory", new DomResultFactory()); + } + catch (ParserConfigurationException e) { throw new org.springframework.integration.ConfigurationException( "Exception creating DomResultFactory"); } - } else if (resultFactory.equals("StringResult")) { - builder - .addPropertyValue("resultFactory", - new StringResultFactory()); + } + else if (resultFactory.equals("StringResult")) { + builder.addPropertyValue("resultFactory", new StringResultFactory()); } } + } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java index 65b79b6f0e..1fe5cc457f 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParser.java @@ -20,7 +20,7 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser; import org.springframework.integration.xml.transformer.XmlPayloadUnmarshallingTransformer; import org.springframework.util.Assert; @@ -32,7 +32,7 @@ import org.springframework.util.Assert; public class XmlUnmarshallingTransformerParser extends AbstractPayloadTransformerParser { @Override - protected Class> getTransformerClass() { + protected Class> getTransformerClass() { return XmlPayloadUnmarshallingTransformer.class; } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java index 0a65f868ae..02b5760084 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java @@ -20,7 +20,7 @@ import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser; import org.springframework.integration.xml.transformer.XsltPayloadTransformer; import org.springframework.util.Assert; @@ -33,7 +33,7 @@ import org.springframework.util.StringUtils; public class XsltPayloadTransformerParser extends AbstractPayloadTransformerParser { @Override - protected Class> getTransformerClass() { + protected Class> getTransformerClass() { return XsltPayloadTransformer.class; } @@ -47,14 +47,12 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars boolean oneHasText = StringUtils.hasText(xslResource) || StringUtils.hasText(xslTemplates); Assert.state(!bothHaveText && oneHasText, "Exactly one of 'xsl-resource' or 'xsl-templates' is required."); - if (StringUtils.hasText(xslResource)) { builder.addConstructorArgValue(xslResource); } else if (StringUtils.hasText(xslTemplates)) { builder.addConstructorArgReference(xslTemplates); } - String sourceFactory = element.getAttribute("source-factory"); if (StringUtils.hasText(sourceFactory)) { builder.addPropertyReference("sourceFactory", sourceFactory); @@ -63,7 +61,6 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars if (StringUtils.hasText(resultFactory)) { builder.addPropertyReference("resultFactory", resultFactory); } - if(StringUtils.hasText(resultTransformer)){ builder.addConstructorArgReference(resultTransformer); } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/SourceCreatingTransformer.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/SourceCreatingTransformer.java index 071b413c4e..b2fd320f7c 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/SourceCreatingTransformer.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/SourceCreatingTransformer.java @@ -18,7 +18,7 @@ package org.springframework.integration.xml.transformer; import javax.xml.transform.Source; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.xml.source.DomSourceFactory; import org.springframework.integration.xml.source.SourceFactory; @@ -28,7 +28,7 @@ import org.springframework.integration.xml.source.SourceFactory; * * @author Jonas Partner */ -public class SourceCreatingTransformer implements PayloadTransformer { +public class SourceCreatingTransformer extends AbstractPayloadTransformer { private final SourceFactory sourceFactory; @@ -41,8 +41,8 @@ public class SourceCreatingTransformer implements PayloadTransformer { +public class XmlPayloadMarshallingTransformer extends AbstractPayloadTransformer { private final Marshaller marshaller; @@ -44,8 +43,7 @@ public class XmlPayloadMarshallingTransformer implements private final ResultTransformer resultTransformer; - public XmlPayloadMarshallingTransformer(Marshaller marshaller, - ResultTransformer resultTransformer) + public XmlPayloadMarshallingTransformer(Marshaller marshaller, ResultTransformer resultTransformer) throws ParserConfigurationException { Assert.notNull(marshaller, "a marshaller is required"); this.marshaller = marshaller; @@ -53,17 +51,18 @@ public class XmlPayloadMarshallingTransformer implements resultFactory = new DomResultFactory(); } - public XmlPayloadMarshallingTransformer(Marshaller marshaller) - throws ParserConfigurationException { + public XmlPayloadMarshallingTransformer(Marshaller marshaller) throws ParserConfigurationException { this(marshaller, null); } + public void setResultFactory(ResultFactory resultFactory) { Assert.notNull(resultFactory, "ResultFactory must not be null"); this.resultFactory = resultFactory; } - public Object transform(Object payload) { + @Override + public Object transformPayload(Object payload) { Object transformedPayload = null; Result result = this.resultFactory.createResult(payload); if (result == null) { diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformer.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformer.java index 5a19a3f30c..feeb3365d7 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformer.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformer.java @@ -21,67 +21,43 @@ import java.io.IOException; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; +import org.w3c.dom.Document; + import org.springframework.integration.message.MessagingException; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.xml.source.DomSourceFactory; import org.springframework.integration.xml.source.SourceFactory; import org.springframework.oxm.Unmarshaller; import org.springframework.util.Assert; import org.springframework.xml.transform.StringSource; -import org.w3c.dom.Document; /** * An implementation of {@link PayloadTransformer} that delegates to an OXM * {@link Unmarshaller}. Expects the payload to be of type {@link Document}, * {@link String}, {@link Source} or to have an instance of * {@link SourceFactory} that can convert to a {@link Source}. If - * alwaysUseSourceFactory is set to true then the {@link SourceFactory} will - * be used to create the {@link Source} regardless of payload type - * + * alwaysUseSourceFactory is set to true, then the {@link SourceFactory} + * will be used to create the {@link Source} regardless of payload type. * * @author Jonas Partner */ -public class XmlPayloadUnmarshallingTransformer implements - PayloadTransformer { +public class XmlPayloadUnmarshallingTransformer extends AbstractPayloadTransformer { private volatile boolean alwaysUseSourceFactory = false; private final Unmarshaller unmarshaller; - + private volatile SourceFactory sourceFactory = new DomSourceFactory(); + public XmlPayloadUnmarshallingTransformer(Unmarshaller unmarshaller) { this.unmarshaller = unmarshaller; } - public Object transform(Object payload) { - Source source = null; - if (alwaysUseSourceFactory) { - source = sourceFactory.createSource(payload); - } else if (payload instanceof String) { - source = new StringSource((String) payload); - } else if (payload instanceof Document) { - source = new DOMSource((Document) payload); - } else if (payload instanceof Source) { - source = (Source) payload; - } else { - source = this.sourceFactory.createSource(payload); - } - - if (source == null) { - throw new MessagingException( - "Failed to transform message, payload not assignable from javax.xml.transform.Source and no conversion possible"); - } - - try { - return this.unmarshaller.unmarshal(source); - } catch (IOException e) { - throw new MessagingException("Failed to unamrshal payload", e); - } - } /** - * If true always delegate to the {@link SourceFactory} + * If true always delegate to the {@link SourceFactory}. + * * @param alwaysUseSourceFactory */ public void setAlwaysUseSourceFactory(boolean alwaysUseSourceFactory) { @@ -89,12 +65,41 @@ public class XmlPayloadUnmarshallingTransformer implements } /** - * * @param sourceFactory */ public void setSourceFactory(SourceFactory sourceFactory) { - Assert.notNull(sourceFactory, "SourceFactory can not be null"); + Assert.notNull(sourceFactory, "sourceFactory must not be null"); this.sourceFactory = sourceFactory; } + @Override + public Object transformPayload(Object payload) { + Source source = null; + if (this.alwaysUseSourceFactory) { + source = this.sourceFactory.createSource(payload); + } + else if (payload instanceof String) { + source = new StringSource((String) payload); + } + else if (payload instanceof Document) { + source = new DOMSource((Document) payload); + } + else if (payload instanceof Source) { + source = (Source) payload; + } + else { + source = this.sourceFactory.createSource(payload); + } + if (source == null) { + throw new MessagingException( + "failed to transform message, payload not assignable from javax.xml.transform.Source and no conversion possible"); + } + try { + return this.unmarshaller.unmarshal(source); + } + catch (IOException e) { + throw new MessagingException("failed to unmarshal payload", e); + } + } + } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java index b4cfe33f24..d8fb452962 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java @@ -26,9 +26,11 @@ import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.Document; + import org.springframework.core.io.Resource; import org.springframework.integration.message.MessagingException; -import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.transformer.AbstractPayloadTransformer; import org.springframework.integration.xml.result.DomResultFactory; import org.springframework.integration.xml.result.ResultFactory; import org.springframework.integration.xml.source.DomSourceFactory; @@ -36,7 +38,6 @@ import org.springframework.integration.xml.source.SourceFactory; import org.springframework.util.Assert; import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringSource; -import org.w3c.dom.Document; /** * XSLT transformer implementation which returns a transformed {@link Source}, @@ -62,8 +63,7 @@ import org.w3c.dom.Document; * @author Jonas Partner * @author Mark Fisher */ -public class XsltPayloadTransformer implements - PayloadTransformer { +public class XsltPayloadTransformer extends AbstractPayloadTransformer { private final Templates templates; @@ -75,8 +75,8 @@ public class XsltPayloadTransformer implements private volatile boolean alwaysUseSourceResultFactories = false; - public XsltPayloadTransformer(Templates templates) - throws ParserConfigurationException { + + public XsltPayloadTransformer(Templates templates) throws ParserConfigurationException { this(templates, null); } @@ -91,34 +91,14 @@ public class XsltPayloadTransformer implements this(TransformerFactory.newInstance().newTemplates( new StreamSource(xslResource.getInputStream())),null); } - - + public XsltPayloadTransformer(Resource xslResource, ResultTransformer resultTransformer) throws Exception { this(TransformerFactory.newInstance().newTemplates( new StreamSource(xslResource.getInputStream())),resultTransformer); } - - public Object transform(Object payload) throws TransformerException { - Object transformedPayload; - if (alwaysUseSourceResultFactories) { - transformedPayload = transformUsingFactories(payload); - } else if (payload instanceof String) { - transformedPayload = transformString((String) payload); - } else if (payload instanceof Document) { - transformedPayload = transformDocument((Document) payload); - } else if (payload instanceof Source) { - transformedPayload = transformSource((Source) payload, payload); - } else { - // fall back to trying factories - transformedPayload = transformUsingFactories(payload); - } - return transformedPayload; - - } /** - * * @param sourceFactory */ public void setSourceFactory(SourceFactory sourceFactory) { @@ -127,7 +107,6 @@ public class XsltPayloadTransformer implements } /** - * * @param resultFactory */ public void setResultFactory(ResultFactory resultFactory) { @@ -146,14 +125,34 @@ public class XsltPayloadTransformer implements this.alwaysUseSourceResultFactories = alwaysUserSourceResultFactories; } - protected Object transformUsingFactories(Object payload) - throws TransformerException { + @Override + public Object transformPayload(Object payload) throws TransformerException { + Object transformedPayload = null; + if (this.alwaysUseSourceResultFactories) { + transformedPayload = transformUsingFactories(payload); + } + else if (payload instanceof String) { + transformedPayload = transformString((String) payload); + } + else if (payload instanceof Document) { + transformedPayload = transformDocument((Document) payload); + } + else if (payload instanceof Source) { + transformedPayload = transformSource((Source) payload, payload); + } + else { + // fall back to trying factories + transformedPayload = transformUsingFactories(payload); + } + return transformedPayload; + } + + protected Object transformUsingFactories(Object payload) throws TransformerException { Source source = sourceFactory.createSource(payload); return transformSource(source, payload); } - protected Object transformSource(Source source, Object payload) - throws TransformerException { + protected Object transformSource(Source source, Object payload) throws TransformerException { Result result = resultFactory.createResult(payload); this.templates.newTransformer().transform(source, result); @@ -161,24 +160,21 @@ public class XsltPayloadTransformer implements return resultTransformer.transformResult(result); } return result; - } - protected String transformString(String stringPayload) - throws TransformerException { + protected String transformString(String stringPayload) throws TransformerException { StringResult result = new StringResult(); this.templates.newTransformer().transform( new StringSource(stringPayload), result); return result.toString(); } - protected Document transformDocument(Document documentPayload) - throws TransformerException { + protected Document transformDocument(Document documentPayload) throws TransformerException { DOMSource source = new DOMSource(documentPayload); Result result = resultFactory.createResult(documentPayload); if (!DOMResult.class.isAssignableFrom(result.getClass())) { throw new MessagingException( - "Document to Document conversion requires a DOMResult producing ResultFactory implementation"); + "Document to Document conversion requires a DOMResult-producing ResultFactory implementation"); } DOMResult domResult = (DOMResult) result; this.templates.newTransformer().transform(source, domResult); diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests-context.xml b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests-context.xml index 9f9e46df5d..7c9b239832 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests-context.xml +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests-context.xml @@ -6,30 +6,23 @@ http://www.springframework.org/schema/integration-xml http://www.springframework.org/schema/integration/spring-integration-xml-1.0.xsd"> - - + id="marshallingTransformerNoResultFactory" marshaller="marshaller" /> - - - + - - + diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests.java index c842799862..efd6d01a29 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlMarshallingTransformerParserTests.java @@ -28,9 +28,9 @@ import org.w3c.dom.Document; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; +import org.springframework.integration.transformer.Transformer; import org.springframework.xml.transform.StringResult; /** @@ -49,9 +49,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testDefault() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerNoResultFactory"); + Transformer transformer = (Transformer) appContext.getBean("marshallingTransformerNoResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertTrue("Wrong payload type", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent()); @@ -59,9 +59,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testDefaultWithResultTransformer() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerWithResultTransformer"); + Transformer transformer = (Transformer) appContext.getBean("marshallingTransformerWithResultTransformer"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertTrue("Wrong payload type", result.getPayload() instanceof String); String resultPayload = (String)result.getPayload(); assertEquals("Wrong palyoad", "testReturn", resultPayload); @@ -69,9 +69,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testDOMResult() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerDOMResultFactory"); + Transformer transformer = (Transformer) appContext.getBean("marshallingTransformerDOMResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertTrue("Wrong payload type ", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent()); @@ -79,9 +79,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testStringResult() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerStringResultFactory"); + Transformer transformer = (Transformer) appContext.getBean("marshallingTransformerStringResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertTrue("Wrong payload type", result.getPayload() instanceof StringResult); } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParserTests.java index c4f5b357b7..fc73a9865a 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XmlUnmarshallingTransformerParserTests.java @@ -26,10 +26,10 @@ import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; +import org.springframework.integration.transformer.Transformer; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.xml.transform.StringSource; @@ -53,41 +53,41 @@ public class XmlUnmarshallingTransformerParserTests { @Test public void testDefaultUnmarshall() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); + Transformer transformer = (Transformer) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage(new StringSource( "test")); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof StringSource); } @Test public void testUnmarshallString() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); + Transformer transformer = (Transformer) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage( "test"); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof StringSource); } @Test public void testUnmarshallDocument() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); + Transformer transformer = (Transformer) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage( XmlTestUtil .getDocumentForString("test")); - Message result = transformer.handle(message); + Message result = transformer.transform(message); assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof DOMSource); } @Test(expected = MessagingException.class) public void testUnmarshallUnsupported() throws Exception { - MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); + Transformer transformer = (Transformer) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage(new StringBuffer( "test")); - transformer.handle(message); + transformer.transform(message); } } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests.java index acf9e4f456..d80912b61e 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests.java @@ -28,9 +28,9 @@ import org.w3c.dom.Document; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.GenericMessage; import org.springframework.integration.message.Message; +import org.springframework.integration.transformer.Transformer; import org.springframework.integration.xml.util.XmlTestUtil; /** @@ -51,10 +51,10 @@ public class XsltPayloadTransformerParserTests { @Test public void testWithResourceProvided() throws Exception { - MessageHandler messageTransformer = (MessageHandler) applicationContext + Transformer transformer = (Transformer) applicationContext .getBean("xsltTransformerWithResource"); GenericMessage message = new GenericMessage(XmlTestUtil.getDomSourceForString(doc)); - Message result = messageTransformer.handle(message); + Message result = transformer.transform(message); assertTrue("Payload was not a DOMResult", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong payload", "test", doc.getDocumentElement().getTextContent()); @@ -62,25 +62,24 @@ public class XsltPayloadTransformerParserTests { @Test public void testWithTemplatesProvided() throws Exception { - MessageHandler messageTransformer = (MessageHandler) applicationContext + Transformer transformer = (Transformer) applicationContext .getBean("xsltTransformerWithTemplates"); GenericMessage message = new GenericMessage(XmlTestUtil.getDomSourceForString(doc)); - Message result = messageTransformer.handle(message); + Message result = transformer.transform(message); assertTrue("Payload was not a DOMResult", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong payload", "test", doc.getDocumentElement().getTextContent()); } - + @Test public void testWithTemplatesAndResultTransformer() throws Exception { - MessageHandler messageTransformer = (MessageHandler) applicationContext + Transformer transformer = (Transformer) applicationContext .getBean("xsltTransformerWithTemplatesAndResultTransformer"); GenericMessage message = new GenericMessage(XmlTestUtil.getDomSourceForString(doc)); - Message result = messageTransformer.handle(message); - + Message result = transformer.transform(message); assertEquals("Wrong payload type", String.class, result.getPayload().getClass()); String strResult = (String)result.getPayload(); assertEquals("Wrong payload", "testReturn", strResult); } - + } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformerTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformerTests.java index 52997d16b5..ec3c6811d8 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformerTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformerTests.java @@ -42,7 +42,7 @@ public class XmlPayloadMarshallingTransformerTests { XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer( marshaller); transformer.setResultFactory(new StringResultFactory()); - Object result = transformer.transform("world"); + Object result = transformer.transformPayload("world"); assertEquals(StringResult.class, result.getClass()); assertEquals("hello world", result.toString()); assertEquals("world", marshaller.payloads.get(0)); @@ -53,7 +53,7 @@ public class XmlPayloadMarshallingTransformerTests { TestMarshaller marshaller = new TestMarshaller(); XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer( marshaller); - Object result = transformer.transform("world"); + Object result = transformer.transformPayload("world"); assertEquals(DOMResult.class, result.getClass()); assertEquals("world", marshaller.payloads.get(0)); } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformerTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformerTests.java index 7b98fc41f5..97aeaf0ffb 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformerTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XmlPayloadUnmarshallingTransformerTests.java @@ -37,7 +37,7 @@ public class XmlPayloadUnmarshallingTransformerTests { public void testStringSourceToString() { Unmarshaller unmarshaller = new TestUnmarshaller(); XmlPayloadUnmarshallingTransformer transformer = new XmlPayloadUnmarshallingTransformer(unmarshaller); - Object transformed = transformer.transform(new StringSource("world")); + Object transformed = transformer.transformPayload(new StringSource("world")); assertEquals(String.class, transformed.getClass()); assertEquals("hello world", transformed.toString()); } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTest.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTest.java index 482caa9909..27b3c4bdde 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTest.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTest.java @@ -51,7 +51,7 @@ public class XsltPayloadTransformerTest { @Test public void testDocumentAsPayload() throws Exception { - Object transformed = transformer.transform(XmlTestUtil + Object transformed = transformer.transformPayload(XmlTestUtil .getDocumentForString(docAsString)); assertTrue("Wrong return type for document payload", Document.class .isAssignableFrom(transformed.getClass())); @@ -63,7 +63,7 @@ public class XsltPayloadTransformerTest { @Test public void testSourceAsPayload() throws Exception { Object transformed = transformer - .transform(new StringSource(docAsString)); + .transformPayload(new StringSource(docAsString)); assertEquals("Wrong return type for source payload", DOMResult.class, transformed.getClass()); DOMResult result = (DOMResult) transformed; @@ -74,7 +74,7 @@ public class XsltPayloadTransformerTest { @Test public void testStringAsPayload() throws Exception { - Object transformed = transformer.transform(docAsString); + Object transformed = transformer.transformPayload(docAsString); assertEquals("Wrong return type for string payload", String.class, transformed.getClass()); String transformedString = (String) transformed; @@ -85,7 +85,7 @@ public class XsltPayloadTransformerTest { @Test public void testStringAsPayloadUseFactoriesTrue() throws Exception { transformer.setAlwaysUseSourceResultFactories(true); - Object transformed = transformer.transform(docAsString); + Object transformed = transformer.transformPayload(docAsString); assertEquals("Wrong return type for useFactories true", DOMResult.class, transformed.getClass()); DOMResult result = (DOMResult) transformed; @@ -99,19 +99,19 @@ public class XsltPayloadTransformerTest { Integer returnValue = new Integer(13); transformer = new XsltPayloadTransformer(getXslResource(), new StubResultTransformer(returnValue)); Object transformed = transformer - .transform(new StringSource(docAsString)); + .transformPayload(new StringSource(docAsString)); assertEquals("Wrong value from result conversion", returnValue, transformed); } @Test(expected = TransformerException.class) public void testNonXmlString() throws Exception { - transformer.transform("test"); + transformer.transformPayload("test"); } @Test(expected = MessagingException.class) public void testUnsupportedPayloadType() throws Exception { - transformer.transform(new Long(12)); + transformer.transformPayload(new Long(12)); } private Resource getXslResource() throws Exception { diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformer.java deleted file mode 100644 index c4e68b2f10..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformer.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import java.util.Map; - -/** - * A strategy interface for modifying the header values of a message. - * - * @author Mark Fisher - */ -public interface HeaderTransformer { - - void transform(Map headers); - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformingMessageHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformingMessageHandler.java deleted file mode 100644 index f1eb65b2ed..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/HeaderTransformingMessageHandler.java +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import java.util.HashMap; -import java.util.Map; - -import org.springframework.integration.handler.MessageHandler; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessagingException; -import org.springframework.util.Assert; - -/** - * A {@link MessageHandler} implementation that delegates to an instance - * of the {@link HeaderTransformer} strategy interface to modify the - * header values of a {@link Message}. - * - * @author Mark Fisher - */ -public class HeaderTransformingMessageHandler implements MessageHandler { - - private final HeaderTransformer transformer; - - - public HeaderTransformingMessageHandler(HeaderTransformer transformer) { - Assert.notNull(transformer, "transformer must not be null"); - this.transformer = transformer; - } - - - public Message handle(Message message) { - try { - Map headerMap = new HashMap(message.getHeaders()); - this.transformer.transform(headerMap); - return MessageBuilder.fromPayload(message.getPayload()).copyHeaders(headerMap).build(); - } catch (Exception e) { - throw new MessagingException(message, "failed to transform message headers", e); - } - } - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingPayloadTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingPayloadTransformer.java deleted file mode 100644 index 831fdabe2e..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MethodInvokingPayloadTransformer.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import org.springframework.beans.factory.InitializingBean; -import org.springframework.integration.ConfigurationException; -import org.springframework.integration.util.MethodInvoker; -import org.springframework.integration.util.NameResolvingMethodInvoker; - -/** - * @author Mark Fisher - */ -public class MethodInvokingPayloadTransformer implements PayloadTransformer, InitializingBean { - - private volatile Object object; - - private volatile String methodName; - - private volatile MethodInvoker invoker; - - private volatile boolean initialized; - - private final Object initializationMonitor = new Object(); - - - public void setObject(Object object) { - this.object = object; - } - - public void setMethodName(String methodName) { - this.methodName = methodName; - } - - public void afterPropertiesSet() { - synchronized (this.initializationMonitor) { - if (this.initialized) { - return; - } - if (this.object == null || this.methodName == null) { - throw new ConfigurationException("the 'object' and 'methodName' are required"); - } - this.invoker = new NameResolvingMethodInvoker(this.object, this.methodName); - this.initialized = true; - } - } - - public Object transform(Object payload) throws Exception { - if (!this.initialized) { - this.afterPropertiesSet(); - } - return this.invoker.invokeMethod(payload); - } - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformer.java deleted file mode 100644 index a31fea3007..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformer.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -/** - * @author Mark Fisher - */ -public interface PayloadTransformer { - - U transform(T payload) throws Exception; - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformingMessageHandler.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformingMessageHandler.java deleted file mode 100644 index 183507911c..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/PayloadTransformingMessageHandler.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2002-2008 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.integration.transformer; - -import org.springframework.integration.handler.MessageHandler; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessageBuilder; -import org.springframework.integration.message.MessagingException; -import org.springframework.util.Assert; - -/** - * @author Mark Fisher - */ -@SuppressWarnings("unchecked") -public class PayloadTransformingMessageHandler implements MessageHandler { - - private final PayloadTransformer transformer; - - - public PayloadTransformingMessageHandler(PayloadTransformer transformer) { - Assert.notNull(transformer, "transformer must not be null"); - this.transformer = transformer; - } - - - public Message handle(Message message) { - try { - Object result = this.transformer.transform(message.getPayload()); - return MessageBuilder.fromPayload(result).copyHeaders(message.getHeaders()).build(); - } catch (Exception e) { - throw new MessagingException(message, "failed to transform message payload", e); - } - } - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java index ab1d1b573b..4376b87ea0 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java @@ -19,11 +19,9 @@ package org.springframework.integration.transformer.config; import org.w3c.dom.Element; import org.springframework.beans.factory.support.BeanDefinitionBuilder; -import org.springframework.beans.factory.support.BeanDefinitionReaderUtils; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; -import org.springframework.integration.transformer.PayloadTransformer; -import org.springframework.integration.transformer.PayloadTransformingMessageHandler; +import org.springframework.integration.transformer.AbstractPayloadTransformer; /** * @author Mark Fisher @@ -42,19 +40,15 @@ public abstract class AbstractPayloadTransformerParser extends AbstractSingleBea @Override protected Class getBeanClass(Element element) { - return PayloadTransformingMessageHandler.class; + return this.getTransformerClass(); } @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - BeanDefinitionBuilder transformerBuilder = BeanDefinitionBuilder.genericBeanDefinition(this.getTransformerClass()); - this.parsePayloadTransformer(element, parserContext, transformerBuilder); - String transformerBeanName = BeanDefinitionReaderUtils.registerWithGeneratedName( - transformerBuilder.getBeanDefinition(), parserContext.getRegistry()); - builder.addConstructorArgReference(transformerBeanName); + this.parsePayloadTransformer(element, parserContext, builder); } - protected abstract Class> getTransformerClass(); + protected abstract Class> getTransformerClass(); protected abstract void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder);