AbstractTransformerParser now creates the actual endpoint rather than requiring a "ref" to an object that implements Transformer. Therefore the element being parsed must provide 'input-channel' and 'output-channel'.

This commit is contained in:
Mark Fisher
2008-09-26 17:42:11 +00:00
parent 9ee921ed7c
commit 959b906f4e
13 changed files with 307 additions and 179 deletions

View File

@@ -16,25 +16,27 @@
package org.springframework.integration.xml.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.transformer.AbstractPayloadTransformer;
import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser;
import org.springframework.integration.transformer.Transformer;
import org.springframework.integration.transformer.config.AbstractTransformerParser;
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 AbstractTransformerParser {
private ResultFactoryResultTypeHelper resultFactoryHelper = new ResultFactoryResultTypeHelper();
@Override
protected Class<? extends AbstractPayloadTransformer<?, ?>> getTransformerClass() {
protected Class<? extends Transformer> getTransformerClass() {
return XmlPayloadMarshallingTransformer.class;
}
@@ -45,7 +47,6 @@ public class XmlMarshallingTransformerParser extends AbstractPayloadTransformerP
String marshaller = element.getAttribute("marshaller");
String resultTransformer = element.getAttribute("result-transformer");
Assert.hasText(marshaller, "the 'marshaller' attribute is required");
builder.addConstructorArgReference(marshaller);
if (StringUtils.hasText(resultTransformer)) {
builder.addConstructorArgReference(resultTransformer);

View File

@@ -20,8 +20,8 @@ import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.transformer.AbstractPayloadTransformer;
import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser;
import org.springframework.integration.transformer.Transformer;
import org.springframework.integration.transformer.config.AbstractTransformerParser;
import org.springframework.integration.xml.transformer.XmlPayloadUnmarshallingTransformer;
import org.springframework.util.Assert;
@@ -29,10 +29,10 @@ import org.springframework.util.Assert;
* @author Jonas Partner
* @author Mark Fisher
*/
public class XmlUnmarshallingTransformerParser extends AbstractPayloadTransformerParser {
public class XmlUnmarshallingTransformerParser extends AbstractTransformerParser {
@Override
protected Class<? extends AbstractPayloadTransformer<?, ?>> getTransformerClass() {
protected Class<? extends Transformer> getTransformerClass() {
return XmlPayloadUnmarshallingTransformer.class;
}

View File

@@ -16,25 +16,27 @@
package org.springframework.integration.xml.config;
import org.w3c.dom.Element;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.transformer.AbstractPayloadTransformer;
import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser;
import org.springframework.integration.transformer.Transformer;
import org.springframework.integration.transformer.config.AbstractTransformerParser;
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 AbstractPayloadTransformerParser {
public class XsltPayloadTransformerParser extends AbstractTransformerParser {
private ResultFactoryResultTypeHelper resultFactoryHelper = new ResultFactoryResultTypeHelper();
@Override
protected Class<? extends AbstractPayloadTransformer<?, ?>> getTransformerClass() {
protected Class<? extends Transformer> getTransformerClass() {
return XsltPayloadTransformer.class;
}
@@ -45,7 +47,6 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars
String resultTransformer = element.getAttribute("result-transformer");
String resultFactory = element.getAttribute("result-factory");
String resultType = element.getAttribute("result-type");
boolean bothHaveText = StringUtils.hasText(xslResource) && StringUtils.hasText(xslTemplates);
boolean oneHasText = StringUtils.hasText(xslResource) || StringUtils.hasText(xslTemplates);
Assert.state(!bothHaveText && oneHasText, "Exactly one of 'xsl-resource' or 'xsl-templates' is required.");
@@ -61,7 +62,6 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars
}
resultFactoryHelper.assertResultFactoryAndTypeValid(resultFactory, resultType);
resultFactoryHelper.addResultFactory(builder, resultType, resultFactory);
if (StringUtils.hasText(resultTransformer)) {
builder.addConstructorArgReference(resultTransformer);
}

View File

@@ -22,18 +22,21 @@
Defines an XML marshalling transformer.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="marshaller" type="xsd:string" use="required"/>
<xsd:attribute name="result-type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DOMResult"/>
<xsd:enumeration value="StringResult"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="result-factory" use="optional"/>
<xsd:attribute name="result-transformer" type="xsd:string" use="optional"/>
<xsd:complexContent>
<xsd:extension base="transformerType">
<xsd:attribute name="marshaller" type="xsd:string" use="required"/>
<xsd:attribute name="result-type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DOMResult"/>
<xsd:enumeration value="StringResult"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="result-factory" use="optional"/>
<xsd:attribute name="result-transformer" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
@@ -44,8 +47,11 @@
Defines an XML unmarshalling transformer.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="unmarshaller" type="xsd:string" use="required"/>
<xsd:complexContent>
<xsd:extension base="transformerType">
<xsd:attribute name="unmarshaller" type="xsd:string" use="required"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
@@ -56,20 +62,23 @@
Defines an XSLT transformer.
</xsd:documentation>
</xsd:annotation>
<xsd:attribute name="id" type="xsd:string" use="required"/>
<xsd:attribute name="xsl-resource" type="xsd:string" use="optional"/>
<xsd:attribute name="xsl-templates" type="xsd:string" use="optional"/>
<xsd:attribute name="source-factory" type="xsd:string" use="optional"/>
<xsd:attribute name="result-factory" type="xsd:string" use="optional"/>
<xsd:attribute name="result-type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DOMResult"/>
<xsd:enumeration value="StringResult"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="result-transformer" type="xsd:string" use="optional"/>
<xsd:complexContent>
<xsd:extension base="transformerType">
<xsd:attribute name="xsl-resource" type="xsd:string" use="optional"/>
<xsd:attribute name="xsl-templates" type="xsd:string" use="optional"/>
<xsd:attribute name="source-factory" type="xsd:string" use="optional"/>
<xsd:attribute name="result-factory" type="xsd:string" use="optional"/>
<xsd:attribute name="result-type" use="optional">
<xsd:simpleType>
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DOMResult"/>
<xsd:enumeration value="StringResult"/>
</xsd:restriction>
</xsd:simpleType>
</xsd:attribute>
<xsd:attribute name="result-transformer" type="xsd:string" use="optional"/>
</xsd:extension>
</xsd:complexContent>
</xsd:complexType>
</xsd:element>
@@ -87,4 +96,10 @@
</xsd:complexType>
</xsd:element>
<xsd:complexType name="transformerType">
<xsd:attribute name="id" type="xsd:string" use="optional"/>
<xsd:attribute name="input-channel" type="xsd:string" use="required"/>
<xsd:attribute name="output-channel" type="xsd:string" use="required"/>
</xsd:complexType>
</xsd:schema>