diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java index 7c116b7dd8..f1bd243458 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/XPathRouterParser.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -16,6 +16,8 @@ package org.springframework.integration.xml.config; +import org.w3c.dom.Element; + import org.springframework.beans.factory.support.BeanDefinitionBuilder; import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; import org.springframework.beans.factory.xml.ParserContext; @@ -27,12 +29,9 @@ import org.springframework.integration.xml.router.XPathSingleChannelNameResolver import org.springframework.util.StringUtils; import org.springframework.xml.xpath.XPathExpression; import org.springframework.xml.xpath.XPathExpressionFactory; -import org.w3c.dom.Element; /** - * * @author Jonas Partner - * */ public class XPathRouterParser extends AbstractSingleBeanDefinitionParser { @@ -48,14 +47,13 @@ public class XPathRouterParser extends AbstractSingleBeanDefinitionParser { @Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - boolean multiChannel = Boolean.parseBoolean(element.getAttribute("multi-channel")); boolean resolutionRequired = Boolean.parseBoolean(element.getAttribute("resolution-required")); String xPathExpression = element.getAttribute("xpath-expression"); String xPathExpressionRef = element.getAttribute("xpath-expression-ref"); if ((StringUtils.hasText(xPathExpression) && StringUtils.hasText(xPathExpressionRef)) || (!StringUtils.hasText(xPathExpression) && !StringUtils.hasText(xPathExpressionRef))) { - throw new ConfigurationException("Exactl one of xpath-expression or xpath-expression-ref is required"); + throw new ConfigurationException("Exactly one of 'xpath-expression' or 'xpath-expression-ref' is required."); } BeanDefinitionBuilder resolverDefinitionBuilder = null; @@ -77,10 +75,8 @@ public class XPathRouterParser extends AbstractSingleBeanDefinitionParser { else { resolverDefinitionBuilder.addConstructorArgReference(xPathExpressionRef); } - - builder.getBeanDefinition().getPropertyValues().addPropertyValue("resolutionRequired", resolutionRequired); - builder.getBeanDefinition().getPropertyValues().addPropertyValue("channelNameResolver", - resolverDefinitionBuilder.getBeanDefinition()); + builder.addPropertyValue("resolutionRequired", resolutionRequired); + builder.addPropertyValue("channelNameResolver", resolverDefinitionBuilder.getBeanDefinition()); } } 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 52f8dd2e98..a033242872 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -16,53 +16,40 @@ package org.springframework.integration.xml.config; -import org.springframework.beans.factory.config.RuntimeBeanReference; +import org.w3c.dom.Element; + 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.transformer.PayloadTransformer; +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.w3c.dom.Element; /** - * * @author Jonas Partner - * + * @author Mark Fisher */ -public class XmlMarshallingTransformerParser extends AbstractSingleBeanDefinitionParser { +public class XmlMarshallingTransformerParser extends AbstractPayloadTransformerParser { @Override - protected boolean shouldGenerateId() { - return false; + protected Class> getTransformerClass() { + return XmlPayloadMarshallingTransformer.class; } @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { - String resourceFactory = element.getAttribute("result-factory"); + protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + String resultFactory = element.getAttribute("result-factory"); String marshaller = element.getAttribute("marshaller"); - - Assert.hasText(marshaller, "A unmarshaller attribute is required"); - - Assert.hasText(resourceFactory, "A result-factory attribute is required"); - - builder.getBeanDefinition().setBeanClass(XmlPayloadMarshallingTransformer.class); - - builder.getBeanDefinition().getConstructorArgumentValues().addGenericArgumentValue( - new RuntimeBeanReference(marshaller)); - - if (resourceFactory.equals("DOMResult")) { - builder.getBeanDefinition().getPropertyValues().addPropertyValue("resultFactory", new DomResultFactory()); + Assert.hasText(marshaller, "the 'marshaller' attribute is required"); + Assert.hasText(resultFactory, "the 'result-factory' attribute is required"); + builder.addConstructorArgReference(marshaller); + if (resultFactory.equals("DOMResult")) { + builder.addPropertyValue("resultFactory", new DomResultFactory()); } - else if (resourceFactory.equals("StringResult")) { - builder.getBeanDefinition().getPropertyValues() - .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 2889fa040f..65b79b6f0e 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 @@ -18,35 +18,29 @@ package org.springframework.integration.xml.config; import org.w3c.dom.Element; -import org.springframework.beans.factory.config.RuntimeBeanReference; 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.transformer.PayloadTransformer; +import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser; import org.springframework.integration.xml.transformer.XmlPayloadUnmarshallingTransformer; import org.springframework.util.Assert; /** * @author Jonas Partner + * @author Mark Fisher */ -public class XmlUnmarshallingTransformerParser extends AbstractSingleBeanDefinitionParser { +public class XmlUnmarshallingTransformerParser extends AbstractPayloadTransformerParser { @Override - protected boolean shouldGenerateId() { - return false; + protected Class> getTransformerClass() { + return XmlPayloadUnmarshallingTransformer.class; } @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String unmarshaller = element.getAttribute("unmarshaller"); - Assert.hasText(unmarshaller, "A unmarshaller attribute is required"); - builder.getBeanDefinition().setBeanClass(XmlPayloadUnmarshallingTransformer.class); - builder.getBeanDefinition().getConstructorArgumentValues().addGenericArgumentValue( - new RuntimeBeanReference(unmarshaller)); + Assert.hasText(unmarshaller, "the 'unmarshaller' attribute is required"); + builder.addConstructorArgReference(unmarshaller); } } 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 684e6b9871..514e2284a3 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -16,63 +16,50 @@ package org.springframework.integration.xml.config; -import org.springframework.beans.factory.config.RuntimeBeanReference; -import org.springframework.beans.factory.config.ConstructorArgumentValues.ValueHolder; +import org.w3c.dom.Element; + 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.transformer.PayloadTransformer; +import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser; import org.springframework.integration.xml.transformer.XsltPayloadTransformer; import org.springframework.util.Assert; import org.springframework.util.StringUtils; -import org.w3c.dom.Element; /** - * * @author Jonas Partner - * + * @author Mark Fisher */ -public class XsltPayloadTransformerParser extends AbstractSingleBeanDefinitionParser { +public class XsltPayloadTransformerParser extends AbstractPayloadTransformerParser { @Override - protected boolean shouldGenerateId() { - return false; + protected Class> getTransformerClass() { + return XsltPayloadTransformer.class; } @Override - protected boolean shouldGenerateIdAsFallback() { - return true; - } - - @Override - protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { + protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { String xslResource = element.getAttribute("xsl-resource"); String xslTemplates = element.getAttribute("xsl-templates"); - boolean bothHaveText = StringUtils.hasText(xslResource) && StringUtils.hasText(xslTemplates); boolean oneHasText = StringUtils.hasText(xslResource) || StringUtils.hasText(xslTemplates); - Assert.state(!bothHaveText && oneHasText, - "Exaclty one of xsl-resource or xsl-templates should be specified"); + "Exactly one of 'xsl-resource' or 'xsl-templates' is required."); - builder.getBeanDefinition().setBeanClass(XsltPayloadTransformer.class); - - - if(StringUtils.hasText(xslResource)){ - builder.getBeanDefinition().getConstructorArgumentValues() - .addGenericArgumentValue(new ValueHolder(xslResource)); - } else if (StringUtils.hasText(xslTemplates)){ - builder.getBeanDefinition().getConstructorArgumentValues() - .addGenericArgumentValue(new RuntimeBeanReference(xslTemplates)); + 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.getBeanDefinition().getPropertyValues().addPropertyValue("sourceFactory", new RuntimeBeanReference(sourceFactory)); + if (StringUtils.hasText(sourceFactory)) { + builder.addPropertyReference("sourceFactory", sourceFactory); } - String resultFactory = element.getAttribute("result-factory"); - if(StringUtils.hasText(resultFactory)){ - builder.getBeanDefinition().getPropertyValues().addPropertyValue("resultFactory", new RuntimeBeanReference(resultFactory)); + if (StringUtils.hasText(resultFactory)) { + builder.addPropertyReference("resultFactory", resultFactory); } } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/DomResultFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/DomResultFactory.java index ce63bddea8..8fd0821e9a 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/DomResultFactory.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/DomResultFactory.java @@ -19,16 +19,12 @@ package org.springframework.integration.xml.result; import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; -import org.springframework.integration.message.Message; - /** - * * @author Jonas Partner - * */ public class DomResultFactory implements ResultFactory { - public Result getNewResult(Message message) { + public Result createResult(Object payload) { return new DOMResult(); } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/ResultFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/ResultFactory.java index 5e5d121010..287aa90f7e 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/ResultFactory.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/ResultFactory.java @@ -18,16 +18,14 @@ package org.springframework.integration.xml.result; import javax.xml.transform.Result; -import org.springframework.integration.message.Message; - /** - * Factory to create {@link ResultFactory} possibly taking into account the - * passed {@link Message} instance - * @author Jonas Partner + * Factory to create a {@link Result} possibly taking into account the + * provided message payload instance. * + * @author Jonas Partner */ public interface ResultFactory { - Result getNewResult(Message message); + Result createResult(Object payload); } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/StringResultFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/StringResultFactory.java index dc0c21ebfa..0b28954a98 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/StringResultFactory.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/result/StringResultFactory.java @@ -18,17 +18,14 @@ package org.springframework.integration.xml.result; import javax.xml.transform.Result; -import org.springframework.integration.message.Message; import org.springframework.xml.transform.StringResult; /** - * * @author Jonas Partner - * */ public class StringResultFactory implements ResultFactory { - public Result getNewResult(Message message) { + public Result createResult(Object payload) { return new StringResult(); } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/DomSourceFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/DomSourceFactory.java index 677d40681a..310613d29d 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/DomSourceFactory.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/DomSourceFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -18,27 +18,27 @@ package org.springframework.integration.xml.source; import java.io.StringReader; -import javax.sound.sampled.SourceDataLine; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.Source; import javax.xml.transform.dom.DOMSource; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessagingException; import org.w3c.dom.Document; import org.xml.sax.InputSource; +import org.springframework.integration.message.MessagingException; + /** - * {@link SourceDataLine} implementation which supports creation of a - * {@link DOMSource} from a {@link Document} or {@link String} payload + * {@link SourceFactory} implementation which supports creation of a + * {@link DOMSource} from a {@link Document} or {@link String} payload. * * @author Jonas Partner - * + * @author Mark Fisher */ public class DomSourceFactory implements SourceFactory { private final DocumentBuilderFactory docBuilderFactory; + public DomSourceFactory() { this.docBuilderFactory = DocumentBuilderFactory.newInstance(); } @@ -47,31 +47,31 @@ public class DomSourceFactory implements SourceFactory { this.docBuilderFactory = docBuilderFactory; } - public Source getSourceForMessage(Message message) { - if (Document.class.isAssignableFrom(message.getPayload().getClass())) { - return createDomSourceForDocument(message); + + public Source createSource(Object payload) { + if (Document.class.isAssignableFrom(payload.getClass())) { + return createDomSourceForDocument((Document) payload); } - else if (message.getPayload() instanceof String) { - return createDomSourceForString(message); + else if (payload instanceof String) { + return createDomSourceForString((String) payload); } - throw new MessagingException(message, "Could not create Source for payload type " - + message.getPayload().getClass().getName()); + throw new MessagingException("Failed to create Source for payload type [" + + payload.getClass().getName() + "]"); } - protected DOMSource createDomSourceForDocument(Message message) { - DOMSource source = new DOMSource(((Document) message.getPayload()).getDocumentElement()); + protected DOMSource createDomSourceForDocument(Document document) { + DOMSource source = new DOMSource(document.getDocumentElement()); return source; } - protected DOMSource createDomSourceForString(Message message) { + protected DOMSource createDomSourceForString(String s) { try { - String str = (String) message.getPayload(); - Document doc = docBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(str))); + Document doc = docBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(s))); DOMSource source = new DOMSource(doc.getDocumentElement()); return source; } catch (Exception e) { - throw new MessagingException(message, "Exception creating DOMSource", e); + throw new MessagingException("Exception creating DOMSource", e); } } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/SourceFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/SourceFactory.java index 41110be179..9acf501a02 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/SourceFactory.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/SourceFactory.java @@ -18,17 +18,14 @@ package org.springframework.integration.xml.source; import javax.xml.transform.Source; -import org.springframework.integration.message.Message; - /** - * Factory to create instances of {@link Source} possibly taking into account - * the contents of the passed {@link Message} + * Factory to create a {@link Source} possibly taking into account + * the provided message payload instance. * * @author Jonas Partner - * */ public interface SourceFactory { - Source getSourceForMessage(Message message); + Source createSource(Object payload); } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformer.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformer.java index 1b3bae813e..068ed2915c 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformer.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformer.java @@ -27,10 +27,8 @@ import javax.xml.transform.dom.DOMResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; -import org.springframework.integration.transformer.MessageTransformer; +import org.springframework.integration.transformer.PayloadTransformer; import org.springframework.xml.transform.StringResult; /** @@ -38,7 +36,7 @@ import org.springframework.xml.transform.StringResult; * * @author Jonas Partner */ -public class ResultToDocumentTransformer implements MessageTransformer { +public class ResultToDocumentTransformer implements PayloadTransformer { // Not guaranteed to be thread safe private final DocumentBuilderFactory documentBuilderFactory; @@ -54,39 +52,37 @@ public class ResultToDocumentTransformer implements MessageTransformer { @SuppressWarnings("unchecked") - public Message transform(Message message) { + public Document transform(Result payload) { Document doc = null; - if (DOMResult.class.isAssignableFrom(message.getPayload().getClass())) { - doc = createDocumentFromDomResult(message, (DOMResult) message.getPayload()); + if (DOMResult.class.isAssignableFrom(payload.getClass())) { + doc = createDocumentFromDomResult((DOMResult) payload); } - else if (StringResult.class.isAssignableFrom(message.getPayload().getClass())) { - doc = createDocumentFromStringResult(message, (StringResult) message.getPayload()); + else if (StringResult.class.isAssignableFrom(payload.getClass())) { + doc = createDocumentFromStringResult((StringResult) payload); } else { - throw new MessagingException(message, "Failed to create document from payload type [" - + message.getPayload().getClass().getName() + "]"); + throw new MessagingException("Failed to create document from payload type [" + + payload.getClass().getName() + "]"); } - return new GenericMessage(doc, message.getHeaders()); + return doc; } - @SuppressWarnings("unchecked") - protected Document createDocumentFromDomResult(Message message, DOMResult domResult) { + protected Document createDocumentFromDomResult(DOMResult domResult) { return (Document) domResult.getNode(); } - @SuppressWarnings("unchecked") - protected Document createDocumentFromStringResult(Message message, StringResult stringResult) { + protected Document createDocumentFromStringResult(StringResult stringResult) { try { return getDocumentBuilder().parse(new InputSource(new StringReader(stringResult.toString()))); } catch (Exception e) { - throw new MessagingException(message, "Exception creating Document form StringResult payload", e); + throw new MessagingException("Failed to create Document from StringResult payload", e); } } protected synchronized DocumentBuilder getDocumentBuilder() { try { - return documentBuilderFactory.newDocumentBuilder(); + return this.documentBuilderFactory.newDocumentBuilder(); } catch (ParserConfigurationException e) { throw new MessagingException("Failed to create a new DocumentBuilder", e); 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 8b845e56cc..071b413c4e 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,19 +18,17 @@ package org.springframework.integration.xml.transformer; import javax.xml.transform.Source; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; -import org.springframework.integration.transformer.MessageTransformer; +import org.springframework.integration.transformer.PayloadTransformer; import org.springframework.integration.xml.source.DomSourceFactory; import org.springframework.integration.xml.source.SourceFactory; /** * Transforms the payload to a {@link Source} using a {@link SourceFactory}. - * Defaults to using a {@link DomSourceFactory} if alternative is not provided. + * Defaults to using a {@link DomSourceFactory} if an alternative is not provided. * * @author Jonas Partner */ -public class SourceCreatingTransformer implements MessageTransformer { +public class SourceCreatingTransformer implements PayloadTransformer { private final SourceFactory sourceFactory; @@ -43,9 +41,9 @@ public class SourceCreatingTransformer implements MessageTransformer { this.sourceFactory = sourceFactory; } - public Message transform(Message message) { - Source source = this.sourceFactory.getSourceForMessage(message); - return new GenericMessage(source, message.getHeaders()); + + public Source transform(Object payload) { + return this.sourceFactory.createSource(payload); } } diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformer.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformer.java index 5b8eeb16ab..7c19d4f5a0 100644 --- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformer.java +++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/transformer/XmlPayloadMarshallingTransformer.java @@ -20,24 +20,21 @@ import java.io.IOException; import javax.xml.transform.Result; +import org.springframework.integration.message.MessagingException; +import org.springframework.integration.transformer.PayloadTransformer; +import org.springframework.integration.xml.result.DomResultFactory; +import org.springframework.integration.xml.result.ResultFactory; import org.springframework.oxm.Marshaller; import org.springframework.util.Assert; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessageHandlingException; -import org.springframework.integration.transformer.MessageTransformer; -import org.springframework.integration.xml.result.DomResultFactory; -import org.springframework.integration.xml.result.ResultFactory; - /** - * An implementation of {@link MessageTransformer} that delegates to an OXM + * An implementation of {@link PayloadTransformer} that delegates to an OXM * {@link Marshaller}. * * @author Mark Fisher * @author Jonas Partner */ -public class XmlPayloadMarshallingTransformer implements MessageTransformer { +public class XmlPayloadMarshallingTransformer implements PayloadTransformer { private final Marshaller marshaller; @@ -55,26 +52,23 @@ public class XmlPayloadMarshallingTransformer implements MessageTransformer { this.resultFactory = resultFactory; } - @SuppressWarnings("unchecked") - public Message transform(Message message) { + public Object transform(Object payload) { Object transformedPayload = null; - Object originalPayload = message.getPayload(); - Result result = this.resultFactory.getNewResult(message); + Result result = this.resultFactory.createResult(payload); if (result == null) { - throw new MessageHandlingException(message, "Unable to marshall payload, ResultFactory returned null"); + throw new MessagingException("Unable to marshal payload, ResultFactory returned null."); } try { - this.marshaller.marshal(originalPayload, result); + this.marshaller.marshal(payload, result); transformedPayload = result; } catch (IOException e) { - throw new MessageHandlingException(message, "failed to marshall payload", e); + throw new MessagingException("Failed to marshal payload", e); } - if (transformedPayload == null) { - throw new MessageHandlingException(message, "failed to transform payload"); + throw new MessagingException("Failed to transform payload"); } - return new GenericMessage(transformedPayload, message.getHeaders()); + return transformedPayload; } } 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 5f8b674299..9df95e8c5a 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 @@ -20,23 +20,21 @@ import java.io.IOException; import javax.xml.transform.Source; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; -import org.springframework.integration.transformer.MessageTransformer; +import org.springframework.integration.transformer.PayloadTransformer; import org.springframework.integration.xml.source.DomSourceFactory; import org.springframework.integration.xml.source.SourceFactory; import org.springframework.oxm.Unmarshaller; /** - * An implementation of {@link MessageTransformer} that delegates to an OXM + * An implementation of {@link PayloadTransformer} that delegates to an OXM * {@link Unmarshaller}. Expects the payload to be of type {@link Source} or to * have an instance of {@link SourceFactory} that can convert to a * {@link Source}. * * @author Jonas Partner */ -public class XmlPayloadUnmarshallingTransformer implements MessageTransformer { +public class XmlPayloadUnmarshallingTransformer implements PayloadTransformer { private final Unmarshaller unmarshaller; @@ -52,27 +50,25 @@ public class XmlPayloadUnmarshallingTransformer implements MessageTransformer { this.sourceFactory = sourceFactory; } - @SuppressWarnings("unchecked") - public Message transform(Message message) { + public Object transform(Object payload) { Source source = null; - if (Source.class.isAssignableFrom(message.getPayload().getClass())) { - source = (Source) message.getPayload(); + if (Source.class.isAssignableFrom(payload.getClass())) { + source = (Source) payload; } else if (this.sourceFactory != null) { - source = this.sourceFactory.getSourceForMessage(message); + source = this.sourceFactory.createSource(payload); } if (source == null) { - throw new MessagingException(message, - "Could not transform message, payload not assignable from javax.xml.transform.Source and no conversion possible"); + throw new MessagingException( + "Failed to transform message, payload not assignable from javax.xml.transform.Source and no conversion possible"); } try { - Object unmarshalled = this.unmarshaller.unmarshal(source); - return new GenericMessage(unmarshalled, message.getHeaders()); + return this.unmarshaller.unmarshal(source); } catch (IOException e) { - throw new MessagingException(message, "Failed to unamrshal payload", e); + throw new MessagingException("Failed to unamrshal 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 1cae87481d..add121250e 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,10 +26,7 @@ import javax.xml.transform.stream.StreamSource; import org.w3c.dom.Document; import org.springframework.core.io.Resource; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.MessagingException; -import org.springframework.integration.transformer.MessageTransformer; +import org.springframework.integration.transformer.PayloadTransformer; import org.springframework.integration.xml.result.DomResultFactory; import org.springframework.integration.xml.result.ResultFactory; import org.springframework.integration.xml.source.DomSourceFactory; @@ -40,8 +37,9 @@ import org.springframework.integration.xml.source.SourceFactory; * {@link Source}, {@link Document}, or {@link String}. * * @author Jonas Partner + * @author Mark Fisher */ -public class XsltPayloadTransformer implements MessageTransformer { +public class XsltPayloadTransformer implements PayloadTransformer { private final Templates templates; @@ -59,27 +57,6 @@ public class XsltPayloadTransformer implements MessageTransformer { } - @SuppressWarnings("unchecked") - public Message transform(Message message) { - try { - if (Source.class.isAssignableFrom(message.getPayload().getClass())) { - return this.transformSource(message, (Source) message.getPayload()); - } - Source source = this.sourceFactory.getSourceForMessage(message); - return this.transformSource(message, source); - } - catch (TransformerException e) { - throw new MessagingException(message, "XSLT transformation failed", e); - } - } - - @SuppressWarnings("unchecked") - protected Message transformSource(Message message, Source source) throws TransformerException { - Result result = resultFactory.getNewResult(message); - this.templates.newTransformer().transform(source, result); - return new GenericMessage(result, message.getHeaders()); - } - public void setSourceFactory(SourceFactory sourceFactory) { this.sourceFactory = sourceFactory; } @@ -88,4 +65,18 @@ public class XsltPayloadTransformer implements MessageTransformer { this.resultFactory = resultFactory; } + public Result transform(Object payload) throws TransformerException { + if (Source.class.isAssignableFrom(payload.getClass())) { + return this.transformSource((Source) payload); + } + Source source = this.sourceFactory.createSource(payload); + return this.transformSource(source); + } + + protected Result transformSource(Source source) throws TransformerException { + Result result = resultFactory.createResult(source); + this.templates.newTransformer().transform(source, result); + return result; + } + } 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 5857b40ff8..607e2e6e31 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 @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -24,18 +24,17 @@ import javax.xml.transform.dom.DOMResult; import org.junit.Before; import org.junit.Test; -import org.springframework.context.ApplicationContext; -import org.springframework.context.support.ClassPathXmlApplicationContext; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; -import org.springframework.integration.transformer.MessageTransformer; -import org.springframework.xml.transform.StringResult; 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.xml.transform.StringResult; + /** - * * @author Jonas Partner - * */ public class XmlMarshallingTransformerParserTests { @@ -43,16 +42,16 @@ public class XmlMarshallingTransformerParserTests { @Before - public void setUp(){ + public void setUp() { this.appContext = new ClassPathXmlApplicationContext("XmlMarshallingTransformerParserTests-context.xml", getClass()); } @Test public void testDefault() throws Exception { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerNoResultFactory"); + MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerNoResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.transform(message); + Message result = transformer.handle(message); assertTrue("Wrong payload type", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent()); @@ -60,9 +59,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testDOMResult() throws Exception { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerDOMResultFactory"); + MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerDOMResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.transform(message); + Message result = transformer.handle(message); assertTrue("Wrong payload type ", result.getPayload() instanceof DOMResult); Document doc = (Document) ((DOMResult) result.getPayload()).getNode(); assertEquals("Wrong palyoad", "hello", doc.getDocumentElement().getTextContent()); @@ -70,9 +69,9 @@ public class XmlMarshallingTransformerParserTests { @Test public void testStringResult() throws Exception { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("marshallingTransfomerStringResultFactory"); + MessageHandler transformer = (MessageHandler) appContext.getBean("marshallingTransfomerStringResultFactory"); GenericMessage message = new GenericMessage("hello"); - Message result = transformer.transform(message); + Message result = transformer.handle(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 774aa974f8..2bad7ec5c4 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.MessageTransformer; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.xml.transform.StringSource; @@ -38,9 +38,9 @@ import org.springframework.xml.transform.StringSource; */ public class XmlUnmarshallingTransformerParserTests { - ApplicationContext appContext; + private ApplicationContext appContext; - StubUnmarshaller unmarshaller; + private StubUnmarshaller unmarshaller; @Before @@ -53,41 +53,41 @@ public class XmlUnmarshallingTransformerParserTests { @Test public void testDefaultUnmarshall() throws Exception { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller"); + MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage(new StringSource( "test")); - Message result = transformer.transform(message); + Message result = transformer.handle(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 { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller"); + MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage( "test"); - Message result = transformer.transform(message); + Message result = transformer.handle(message); assertEquals("Wrong payload after unmarshalling", "unmarshalled", result.getPayload()); assertTrue("Wrong source passed to unmarshaller", unmarshaller.sourcesPassed.poll() instanceof DOMSource); } @Test public void testUnmarshallDocument() throws Exception { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller"); + MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage( XmlTestUtil .getDocumentForString("test")); - Message result = transformer.transform(message); + Message result = transformer.handle(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 { - MessageTransformer transformer = (MessageTransformer) appContext.getBean("defaultUnmarshaller"); + MessageHandler transformer = (MessageHandler) appContext.getBean("defaultUnmarshaller"); GenericMessage message = new GenericMessage(new StringBuffer( "test")); - transformer.transform(message); + transformer.handle(message); } } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml index 35c5d2968c..8c8a15391c 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/config/XsltPayloadTransformerParserTests-context.xml @@ -5,7 +5,7 @@ xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/integration-xml http://www.springframework.org/schema/integration/spring-integration-xml-1.0.xsd"> - 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 1aa32adac5..d9edce1da3 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.MessageTransformer; import org.springframework.integration.xml.util.XmlTestUtil; /** @@ -38,9 +38,9 @@ import org.springframework.integration.xml.util.XmlTestUtil; */ public class XsltPayloadTransformerParserTests { - String doc = "test"; + private String doc = "test"; - ApplicationContext applicationContext; + private ApplicationContext applicationContext; @Before @@ -51,10 +51,10 @@ public class XsltPayloadTransformerParserTests { @Test public void testWithResourceProvided() throws Exception { - MessageTransformer messageTransformer = (MessageTransformer) applicationContext - .getBean("xsltTransfomerWithResource"); + MessageHandler messageTransformer = (MessageHandler) applicationContext + .getBean("xsltTransformerWithResource"); GenericMessage message = new GenericMessage(XmlTestUtil.getDomSourceForString(doc)); - Message result = messageTransformer.transform(message); + Message result = messageTransformer.handle(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,10 +62,10 @@ public class XsltPayloadTransformerParserTests { @Test public void testWithTemplatesProvided() throws Exception { - MessageTransformer messageTransformer = (MessageTransformer) applicationContext + MessageHandler messageTransformer = (MessageHandler) applicationContext .getBean("xsltTransformerWithTemplates"); GenericMessage message = new GenericMessage(XmlTestUtil.getDomSourceForString(doc)); - Message result = messageTransformer.transform(message); + Message result = messageTransformer.handle(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()); diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java index 3ffa02f517..d0a44debaa 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/source/DomSourceFactoryTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -28,16 +28,14 @@ import javax.xml.transform.dom.DOMSource; import org.junit.Before; import org.junit.Test; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.MessagingException; -import org.springframework.xml.transform.StringResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; +import org.springframework.integration.message.MessagingException; +import org.springframework.xml.transform.StringResult; + /** - * * @author Jonas Partner - * */ public class DomSourceFactoryTests { @@ -56,8 +54,7 @@ public class DomSourceFactoryTests { @Test public void testWithDocumentPayload() throws Exception { - GenericMessage message = new GenericMessage(doc); - Source source = sourceFactory.getSourceForMessage(message); + Source source = sourceFactory.createSource(doc); assertNotNull("Returned source was null", source); assertEquals("Expected DOMSource", DOMSource.class, source.getClass()); assertEquals("Wrong content in source ", docContent, getAsString(source)); @@ -65,8 +62,7 @@ public class DomSourceFactoryTests { @Test public void testWithStringPayload() throws Exception { - GenericMessage message = new GenericMessage(docContent); - Source source = sourceFactory.getSourceForMessage(message); + Source source = sourceFactory.createSource(docContent); assertNotNull("Returned source was null", source); assertEquals("Expected DOMSource", DOMSource.class, source.getClass()); assertEquals("Wrong content in source ", docContent, getAsString(source)); @@ -74,11 +70,11 @@ public class DomSourceFactoryTests { @Test(expected = MessagingException.class) public void testWithUnsupportedPayload() throws Exception { - GenericMessage message = new GenericMessage(12); - sourceFactory.getSourceForMessage(message); + sourceFactory.createSource(new Integer(12)); } - String getAsString(Source source) throws Exception { + + private String getAsString(Source source) throws Exception { Transformer transformer = TransformerFactory.newInstance().newTransformer(); StringResult res = new StringResult(); transformer.transform(source, res); diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformerTests.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformerTests.java index 19adc96e15..a814b2048c 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformerTests.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/transformer/ResultToDocumentTransformerTests.java @@ -24,11 +24,8 @@ import javax.xml.transform.sax.SAXResult; import org.junit.Before; import org.junit.Test; - import org.w3c.dom.Document; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.xml.transform.StringResult; @@ -38,9 +35,9 @@ import org.springframework.xml.transform.StringResult; */ public class ResultToDocumentTransformerTests { - String doc = "test"; + private String doc = "test"; - ResultToDocumentTransformer resToDocTransformer; + private ResultToDocumentTransformer resToDocTransformer; @Before @@ -52,27 +49,25 @@ public class ResultToDocumentTransformerTests { @Test public void testWithDomResult() throws Exception { DOMResult result = XmlTestUtil.getDomResultForString(doc); - GenericMessage message = new GenericMessage(result); - Message transformed = resToDocTransformer.transform(message); - assertTrue("Wrong payload type expected Document", transformed.getPayload() instanceof Document); - Document doc = (Document) transformed.getPayload(); + Object transformed = resToDocTransformer.transform(result); + assertTrue("Wrong transformed type expected Document", transformed instanceof Document); + Document doc = (Document) transformed; assertEquals("Wrong root element name", "order", doc.getDocumentElement().getNodeName()); } @Test public void testWithStringResult() throws Exception { StringResult result = XmlTestUtil.getStringResultForString(doc); - GenericMessage message = new GenericMessage(result); - Message transformed = resToDocTransformer.transform(message); - assertTrue("Wrong payload type expected Document", transformed.getPayload() instanceof Document); - Document doc = (Document) transformed.getPayload(); + Object transformed = resToDocTransformer.transform(result); + assertTrue("Wrong transformed type expected Document", transformed instanceof Document); + Document doc = (Document) transformed; assertEquals("Wrong root element name", "order", doc.getDocumentElement().getNodeName()); } @Test(expected = MessagingException.class) public void testWithUnsupportedSaxResult() throws Exception { SAXResult result = new SAXResult(); - GenericMessage message = new GenericMessage(result); - resToDocTransformer.transform(message); + resToDocTransformer.transform(result); } + } 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 a3656cc653..2d073df325 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 @@ -26,8 +26,6 @@ import javax.xml.transform.Result; import javax.xml.transform.dom.DOMResult; import org.junit.Test; -import org.springframework.integration.message.Message; -import org.springframework.integration.message.StringMessage; import org.springframework.integration.xml.result.StringResultFactory; import org.springframework.oxm.Marshaller; import org.springframework.oxm.XmlMappingException; @@ -43,10 +41,9 @@ public class XmlPayloadMarshallingTransformerTests { TestMarshaller marshaller = new TestMarshaller(); XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer(marshaller); transformer.setResultFactory(new StringResultFactory()); - Message message = new StringMessage("world"); - Message result = transformer.transform(message); - assertEquals(StringResult.class, result.getPayload().getClass()); - assertEquals("hello world", result.getPayload().toString()); + Object result = transformer.transform("world"); + assertEquals(StringResult.class, result.getClass()); + assertEquals("hello world", result.toString()); assertEquals("world", marshaller.payloads.get(0)); } @@ -54,16 +51,15 @@ public class XmlPayloadMarshallingTransformerTests { public void testDefaultResultFactory() { TestMarshaller marshaller = new TestMarshaller(); XmlPayloadMarshallingTransformer transformer = new XmlPayloadMarshallingTransformer(marshaller); - Message message = new StringMessage("world"); - Message result = transformer.transform(message); - assertEquals(DOMResult.class, result.getPayload().getClass()); + Object result = transformer.transform("world"); + assertEquals(DOMResult.class, result.getClass()); assertEquals("world", marshaller.payloads.get(0)); } private static class TestMarshaller implements Marshaller { - List payloads = new ArrayList(); + private List payloads = new ArrayList(); @SuppressWarnings("unchecked") public boolean supports(Class clazz) { 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 51dcb8b9f1..7b98fc41f5 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 @@ -24,8 +24,6 @@ import javax.xml.transform.Source; import org.junit.Test; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; import org.springframework.oxm.Unmarshaller; import org.springframework.oxm.XmlMappingException; import org.springframework.xml.transform.StringSource; @@ -39,10 +37,9 @@ public class XmlPayloadUnmarshallingTransformerTests { public void testStringSourceToString() { Unmarshaller unmarshaller = new TestUnmarshaller(); XmlPayloadUnmarshallingTransformer transformer = new XmlPayloadUnmarshallingTransformer(unmarshaller); - Message message = new GenericMessage(new StringSource("world")); - Message transformed = transformer.transform(message); - assertEquals(String.class, transformed.getPayload().getClass()); - assertEquals("hello world", transformed.getPayload().toString()); + Object transformed = transformer.transform(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 27a0e9f429..29620beb25 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 @@ -18,7 +18,6 @@ package org.springframework.integration.xml.transformer; import static org.junit.Assert.assertEquals; -import javax.xml.transform.Source; import javax.xml.transform.dom.DOMResult; import org.junit.Before; @@ -28,10 +27,7 @@ import org.w3c.dom.Document; import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.Resource; -import org.springframework.integration.message.GenericMessage; -import org.springframework.integration.message.Message; import org.springframework.integration.message.MessagingException; -import org.springframework.integration.message.StringMessage; import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.xml.transform.StringSource; @@ -40,48 +36,49 @@ import org.springframework.xml.transform.StringSource; */ public class XsltPayloadTransformerTest { - XsltPayloadTransformer transformer; + private XsltPayloadTransformer transformer; + + private String doc = "test"; - String doc = "test"; @Before public void setUp() throws Exception { transformer = new XsltPayloadTransformer(getXslResource()); } + @Test public void testDocumentAsPayload() throws Exception { - GenericMessage documentMessage = new GenericMessage(XmlTestUtil.getDocumentForString(doc)); - transformer.transform(documentMessage); - + Object transformed = transformer.transform(XmlTestUtil.getDocumentForString(doc)); + DOMResult result = (DOMResult) transformed; + String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName(); + assertEquals("Wrong name for root element after transform", "bob", rootNodeName); } @Test public void testSourceAsPayload() throws Exception { - GenericMessage message = new GenericMessage(new StringSource(doc)); - Message transformed = transformer.transform(message); - DOMResult result = (DOMResult) transformed.getPayload(); + Object transformed = transformer.transform(new StringSource(doc)); + DOMResult result = (DOMResult) transformed; String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName(); assertEquals("Wrong name for root element after transform", "bob", rootNodeName); } @Test public void testStringAsPayload() throws Exception { - GenericMessage message = new GenericMessage(doc); - Message transformed = transformer.transform(message); - DOMResult result = (DOMResult) transformed.getPayload(); + Object transformed = transformer.transform(doc); + DOMResult result = (DOMResult) transformed; String rootNodeName = ((Document) result.getNode()).getDocumentElement().getNodeName(); assertEquals("Wrong name for root element after transform", "bob", rootNodeName); } @Test(expected = MessagingException.class) public void testNonXmlString() throws Exception { - transformer.transform(new StringMessage("test")); + transformer.transform("test"); } @Test(expected = MessagingException.class) public void testUnsupportedPayloadType() throws Exception { - transformer.transform(new GenericMessage(new Long(12))); + transformer.transform(new Long(12)); } diff --git a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/util/XmlTestUtil.java b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/util/XmlTestUtil.java index 5faf61e4b0..f9b1384ec1 100644 --- a/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/util/XmlTestUtil.java +++ b/org.springframework.integration.xml/src/test/java/org/springframework/integration/xml/util/XmlTestUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2002-2007 the original author or authors. + * 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. @@ -25,14 +25,15 @@ import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMResult; import javax.xml.transform.dom.DOMSource; -import org.springframework.xml.transform.StringResult; import org.w3c.dom.Document; import org.xml.sax.InputSource; +import org.springframework.xml.transform.StringResult; + /** - * Utill class for XML related testing - * @author Jonas Partner + * Utility class for XML related testing * + * @author Jonas Partner */ public class XmlTestUtil { diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformer.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformer.java deleted file mode 100644 index bd0756c0d8..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformer.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 org.springframework.integration.message.Message; - -/** - * Base interface for message transformers. - * - * @author Mark Fisher - */ -public interface MessageTransformer { - - Message transform(Message message); - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformerChain.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformerChain.java deleted file mode 100644 index e7fb25be61..0000000000 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformerChain.java +++ /dev/null @@ -1,61 +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.List; -import java.util.concurrent.CopyOnWriteArrayList; - -import org.springframework.integration.message.Message; - -/** - * @author Mark Fisher - */ -public class MessageTransformerChain implements MessageTransformer { - - private final List transformers = new CopyOnWriteArrayList(); - - - /** - * Add a transformer to the end of the chain. - */ - public void add(MessageTransformer transformer) { - this.transformers.add(transformer); - } - - /** - * Add a transformer to the chain at the specified index. - */ - public void add(int index, MessageTransformer transformer) { - this.transformers.add(index, transformer); - } - - public void setTransformers(List transformers) { - this.transformers.clear(); - this.transformers.addAll(transformers); - } - - public Message transform(Message message) { - for (MessageTransformer next : this.transformers) { - message = next.transform(message); - if (message == null) { - return null; - } - } - return message; - } - -} diff --git a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptor.java b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptor.java index c2c9a72cb2..a7c8129a94 100644 --- a/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptor.java +++ b/org.springframework.integration/src/main/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptor.java @@ -19,22 +19,23 @@ package org.springframework.integration.transformer; import org.springframework.integration.channel.ChannelInterceptor; import org.springframework.integration.channel.MessageChannel; import org.springframework.integration.channel.interceptor.ChannelInterceptorAdapter; +import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.Message; /** - * A {@link ChannelInterceptor} which invokes a {@link MessageTransformer} + * A {@link ChannelInterceptor} which invokes a {@link MessageHandler} * when either sending-to or receiving-from a channel. * * @author Jonas Partner */ public class MessageTransformingChannelInterceptor extends ChannelInterceptorAdapter { - private final MessageTransformer transfomer; + private final MessageHandler transfomer; private volatile boolean transformOnSend = true; - public MessageTransformingChannelInterceptor(MessageTransformer transformer) { + public MessageTransformingChannelInterceptor(MessageHandler transformer) { this.transfomer = transformer; } @@ -50,7 +51,7 @@ public class MessageTransformingChannelInterceptor extends ChannelInterceptorAda @Override public Message preSend(Message message, MessageChannel channel) { if (this.transformOnSend) { - message = this.transfomer.transform(message); + message = this.transfomer.handle(message); } return message; } @@ -58,7 +59,7 @@ public class MessageTransformingChannelInterceptor extends ChannelInterceptorAda @Override public Message postReceive(Message message, MessageChannel channel) { if (!this.transformOnSend) { - message = this.transfomer.transform(message); + message = this.transfomer.handle(message); } return message; } diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptorTests.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptorTests.java index 752b8f1835..1d97c9fa59 100644 --- a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptorTests.java +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/MessageTransformingChannelInterceptorTests.java @@ -23,6 +23,7 @@ import org.junit.Test; import org.springframework.integration.channel.AbstractMessageChannel; import org.springframework.integration.channel.QueueChannel; +import org.springframework.integration.handler.MessageHandler; import org.springframework.integration.message.Message; import org.springframework.integration.message.StringMessage; @@ -31,52 +32,53 @@ import org.springframework.integration.message.StringMessage; */ public class MessageTransformingChannelInterceptorTests { - AbstractMessageChannel channel; + private AbstractMessageChannel channel; - StringMessage message; + private StringMessage message; - TestTransformer transfomer; + private TestTransformer transformer; - MessageTransformingChannelInterceptor channelInterceptor; + private MessageTransformingChannelInterceptor channelInterceptor; @Before - public void setUp(){ + public void setUp() { channel = new QueueChannel(); message = new StringMessage("test"); - transfomer = new TestTransformer(); - channelInterceptor = new MessageTransformingChannelInterceptor(transfomer); + transformer = new TestTransformer(); + channelInterceptor = new MessageTransformingChannelInterceptor(transformer); channel.addInterceptor(channelInterceptor); } + @Test public void testTransformOnReceive() { channelInterceptor.setTransformOnSend(false); channel.send(message); - assertFalse("Transfomrer on incorrectly invoked on send", transfomer.invoked); + assertFalse("Transformer incorrectly invoked on send", transformer.invoked); Message msg = channel.receive(1); - assertEquals("Wrong message",message, msg); - assertTrue("Transfomer not invoked on receive", transfomer.invoked); + assertEquals("Wrong message", message, msg); + assertTrue("Transformer not invoked on receive", transformer.invoked); } @Test public void testTransformOnSend() { channelInterceptor.setTransformOnSend(true); channel.send(message); - assertTrue("Transfomrer not invoked on send", transfomer.invoked); + assertTrue("Transformer not invoked on send", transformer.invoked); Message msg = channel.receive(1); - assertEquals("Wrong message",message, msg); - assertEquals("Transfomer invoked on receive", 1, transfomer.invokedCount); + assertEquals("Wrong message", message, msg); + assertEquals("Transformer invoked on receive", 1, transformer.invokedCount); } - private static class TestTransformer implements MessageTransformer { + private static class TestTransformer implements MessageHandler { boolean invoked = false; - + int invokedCount = 0; - - public Message transform(Message message) { + + public Message handle(Message message) { invoked = true; invokedCount++; return message; diff --git a/org.springframework.integration/src/test/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java new file mode 100644 index 0000000000..ab1d1b573b --- /dev/null +++ b/org.springframework.integration/src/test/java/org/springframework/integration/transformer/config/AbstractPayloadTransformerParser.java @@ -0,0 +1,61 @@ +/* + * 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.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; + +/** + * @author Mark Fisher + */ +public abstract class AbstractPayloadTransformerParser extends AbstractSingleBeanDefinitionParser { + + @Override + protected boolean shouldGenerateId() { + return false; + } + + @Override + protected boolean shouldGenerateIdAsFallback() { + return true; + } + + @Override + protected Class getBeanClass(Element element) { + return PayloadTransformingMessageHandler.class; + } + + @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); + } + + protected abstract Class> getTransformerClass(); + + protected abstract void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder); + +}