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 c0cd5f3c55..e6d26c5950 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
@@ -26,6 +26,7 @@ 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;
/**
@@ -45,10 +46,15 @@ public class XmlMarshallingTransformerParser extends
ParserContext parserContext, BeanDefinitionBuilder builder) {
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");
builder.addConstructorArgReference(marshaller);
+ if(StringUtils.hasText(resultTransformer)){
+ builder.addConstructorArgReference(resultTransformer);
+ }
if (resultFactory.equals("DOMResult")) {
try {
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 514e2284a3..0a65f868ae 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
@@ -41,6 +41,8 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars
protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
String xslResource = element.getAttribute("xsl-resource");
String xslTemplates = element.getAttribute("xsl-templates");
+ String resultTransformer = element.getAttribute("result-transformer");
+
boolean bothHaveText = StringUtils.hasText(xslResource) && StringUtils.hasText(xslTemplates);
boolean oneHasText = StringUtils.hasText(xslResource) || StringUtils.hasText(xslTemplates);
Assert.state(!bothHaveText && oneHasText,
@@ -61,6 +63,10 @@ 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/config/spring-integration-xml-1.0.xsd b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd
index 1014a9d517..1c7b60e2cb 100644
--- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd
+++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/spring-integration-xml-1.0.xsd
@@ -36,6 +36,7 @@
+
@@ -69,6 +70,7 @@
use="optional" />
+
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 310613d29d..cdbda46930 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
@@ -22,11 +22,10 @@ import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.Source;
import javax.xml.transform.dom.DOMSource;
+import org.springframework.integration.message.MessagingException;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
-import org.springframework.integration.message.MessagingException;
-
/**
* {@link SourceFactory} implementation which supports creation of a
* {@link DOMSource} from a {@link Document} or {@link String} payload.
@@ -38,7 +37,6 @@ public class DomSourceFactory implements SourceFactory {
private final DocumentBuilderFactory docBuilderFactory;
-
public DomSourceFactory() {
this.docBuilderFactory = DocumentBuilderFactory.newInstance();
}
@@ -49,14 +47,19 @@ public class DomSourceFactory implements SourceFactory {
public Source createSource(Object payload) {
- if (Document.class.isAssignableFrom(payload.getClass())) {
- return createDomSourceForDocument((Document) payload);
+ Source source = null;
+ if (payload instanceof Document) {
+ source = createDomSourceForDocument((Document) payload);
}
else if (payload instanceof String) {
- return createDomSourceForString((String) payload);
+ source = createDomSourceForString((String) payload);
}
+
+ if(source == null){
throw new MessagingException("Failed to create Source for payload type ["
+ payload.getClass().getName() + "]");
+ }
+ return source;
}
protected DOMSource createDomSourceForDocument(Document document) {
@@ -66,11 +69,11 @@ public class DomSourceFactory implements SourceFactory {
protected DOMSource createDomSourceForString(String s) {
try {
- Document doc = docBuilderFactory.newDocumentBuilder().parse(new InputSource(new StringReader(s)));
+ Document doc = docBuilderFactory.newDocumentBuilder().parse(
+ new InputSource(new StringReader(s)));
DOMSource source = new DOMSource(doc.getDocumentElement());
return source;
- }
- catch (Exception e) {
+ } catch (Exception 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 9acf501a02..75a93e54de 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
@@ -26,6 +26,11 @@ import javax.xml.transform.Source;
*/
public interface SourceFactory {
+ /**
+ * Create appropriate {@link Source} instance for payload
+ * @param payload
+ * @return
+ */
Source createSource(Object payload);
}
diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/StringSourceFactory.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/StringSourceFactory.java
index e80395f961..bb544cefaf 100644
--- a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/StringSourceFactory.java
+++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/source/StringSourceFactory.java
@@ -26,9 +26,11 @@ import org.springframework.xml.transform.StringSource;
import org.w3c.dom.Document;
/**
+ * {@link SourceFactory} implementation which supports creation of a
+ * {@link StringSource} from either a {@link Document} or {@link String} payload
*
* @author Jonas Partner
- *
+ *
*/
public class StringSourceFactory implements SourceFactory {
@@ -43,14 +45,20 @@ public class StringSourceFactory implements SourceFactory {
}
public Source createSource(Object payload) {
- if (Document.class.isAssignableFrom(payload.getClass())) {
- return createStringSourceForDocument((Document) payload);
+ Source source = null;
+ if (payload instanceof Document) {
+ source = createStringSourceForDocument((Document) payload);
} else if (payload instanceof String) {
- return new StringSource((String) payload);
+ source = new StringSource((String) payload);
}
- throw new MessagingException(
- "Failed to create Source for payload type ["
- + payload.getClass().getName() + "]");
+
+ if (source == null) {
+ throw new MessagingException(
+ "Failed to create Source for payload type ["
+ + payload.getClass().getName() + "]");
+ }
+ return source;
+
}
protected StringSource createStringSourceForDocument(Document doc) {
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 de2853401b..b9159240a1 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
@@ -35,19 +35,27 @@ import org.springframework.util.Assert;
* @author Mark Fisher
* @author Jonas Partner
*/
-public class XmlPayloadMarshallingTransformer implements PayloadTransformer