diff --git a/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/ResultFactoryResultTypeHelper.java b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/ResultFactoryResultTypeHelper.java
new file mode 100644
index 0000000000..ba0295f3c3
--- /dev/null
+++ b/org.springframework.integration.xml/src/main/java/org/springframework/integration/xml/config/ResultFactoryResultTypeHelper.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright 2002-2007 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.xml.config;
+
+import javax.xml.parsers.ParserConfigurationException;
+
+import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.integration.xml.result.DomResultFactory;
+import org.springframework.integration.xml.result.ResultFactory;
+import org.springframework.integration.xml.result.StringResultFactory;
+import org.springframework.util.Assert;
+import org.springframework.util.StringUtils;
+
+/**
+ * helper class which encapsulates common logic for validating and building a
+ * bean definition for a {@link ResultFactory} based on either the
+ * result-factory or result-type
+ *
+ * @author Jonas Partner
+ *
+ */
+public class ResultFactoryResultTypeHelper {
+
+ public static final String DOM_RESULT = "DOMResult";
+
+ public static final String STRING_RESULT = "StringResult";
+
+ protected void assertResultFactoryAndTypeValid(String resultFactory, String resultType) {
+ boolean bothHaveText = StringUtils.hasText(resultFactory) && StringUtils.hasText(resultType);
+ Assert.state(!bothHaveText, "Exactly one of result-factory or result-type should be specified");
+ if (StringUtils.hasText(resultType)) {
+ Assert.state(resultType.equals(DOM_RESULT) || resultType.equals(STRING_RESULT),
+ "Result type must be either DOMResult or StringResult");
+ }
+ }
+
+ protected void addResultFactory(BeanDefinitionBuilder builder, String resultType, String resultFactory) {
+ if (StringUtils.hasText(resultFactory)) {
+ builder.addPropertyReference("resultFactory", resultFactory);
+ }
+ else if (resultType.equals(DOM_RESULT) || !StringUtils.hasText(resultType)) {
+ try {
+ builder.addPropertyValue("resultFactory", new DomResultFactory());
+ }
+ catch (ParserConfigurationException e) {
+ throw new org.springframework.integration.ConfigurationException("Exception creating DomResultFactory");
+ }
+ }
+ else if (resultType.equals(STRING_RESULT)) {
+ builder.addPropertyValue("resultFactory", new StringResultFactory());
+ }
+ }
+}
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 19e19f64f4..9cce696bb6 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
@@ -16,19 +16,14 @@
package org.springframework.integration.xml.config;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Element;
-
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.transformer.AbstractPayloadTransformer;
import org.springframework.integration.transformer.config.AbstractPayloadTransformerParser;
-import org.springframework.integration.xml.result.DomResultFactory;
-import org.springframework.integration.xml.result.StringResultFactory;
import org.springframework.integration.xml.transformer.XmlPayloadMarshallingTransformer;
import org.springframework.util.Assert;
import org.springframework.util.StringUtils;
+import org.w3c.dom.Element;
/**
* @author Jonas Partner
@@ -36,59 +31,27 @@ import org.springframework.util.StringUtils;
*/
public class XmlMarshallingTransformerParser extends AbstractPayloadTransformerParser {
- public static final String DOM_RESULT = "DOMResult";
-
- public static final String STRING_RESULT = "StringResult";
-
+ private ResultFactoryResultTypeHelper resultFactoryHelper = new ResultFactoryResultTypeHelper();
+
@Override
protected Class extends AbstractPayloadTransformer, ?>> getTransformerClass() {
return XmlPayloadMarshallingTransformer.class;
}
@Override
- protected void parsePayloadTransformer(Element element,
- ParserContext parserContext, BeanDefinitionBuilder builder) {
+ protected void parsePayloadTransformer(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) {
String resultFactory = element.getAttribute("result-factory");
String resultType = element.getAttribute("result-type");
String marshaller = element.getAttribute("marshaller");
String resultTransformer = element.getAttribute("result-transformer");
Assert.hasText(marshaller, "the 'marshaller' attribute is required");
-
- assertResultFactoryAndTypeValid(resultFactory, resultType);
-
+
builder.addConstructorArgReference(marshaller);
-
- if(StringUtils.hasText(resultTransformer)){
+ if (StringUtils.hasText(resultTransformer)) {
builder.addConstructorArgReference(resultTransformer);
}
-
- if(StringUtils.hasText(resultFactory)){
- builder.addPropertyReference("resultFactory", resultFactory);
- } else if (resultType.equals(DOM_RESULT) || !StringUtils.hasText(resultType)) {
- try {
- builder.addPropertyValue("resultFactory", new DomResultFactory());
- }
- catch (ParserConfigurationException e) {
- throw new org.springframework.integration.ConfigurationException(
- "Exception creating DomResultFactory");
- }
- }
- else if (resultType.equals(STRING_RESULT)) {
- builder.addPropertyValue("resultFactory", new StringResultFactory());
- }
+ resultFactoryHelper.assertResultFactoryAndTypeValid(resultFactory, resultType);
+ resultFactoryHelper.addResultFactory(builder, resultType, resultFactory);
}
-
- protected void assertResultFactoryAndTypeValid(String resultFactory, String resultType){
- boolean bothHaveText = StringUtils.hasText(resultFactory) && StringUtils.hasText(resultType);
- if(bothHaveText){
- System.out.println("bob");
- }
- Assert.state(!bothHaveText , "Exactly one of result-factory or result-type should be specified");
- if(StringUtils.hasText(resultType)){
- Assert.state(resultType.equals(DOM_RESULT) || resultType.equals(STRING_RESULT), "Result type must be either DOMResult or StringResult");
- }
- }
-
-
}
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 02b5760084..22a2aaecc9 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
@@ -16,8 +16,6 @@
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;
@@ -25,6 +23,7 @@ import org.springframework.integration.transformer.config.AbstractPayloadTransfo
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
@@ -32,9 +31,11 @@ import org.springframework.util.StringUtils;
*/
public class XsltPayloadTransformerParser extends AbstractPayloadTransformerParser {
+ private ResultFactoryResultTypeHelper resultFactoryHelper = new ResultFactoryResultTypeHelper();
+
@Override
protected Class extends AbstractPayloadTransformer, ?>> getTransformerClass() {
- return XsltPayloadTransformer.class;
+ return XsltPayloadTransformer.class;
}
@Override
@@ -42,11 +43,12 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars
String xslResource = element.getAttribute("xsl-resource");
String xslTemplates = element.getAttribute("xsl-templates");
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.");
+ Assert.state(!bothHaveText && oneHasText, "Exactly one of 'xsl-resource' or 'xsl-templates' is required.");
if (StringUtils.hasText(xslResource)) {
builder.addConstructorArgValue(xslResource);
}
@@ -57,11 +59,10 @@ public class XsltPayloadTransformerParser extends AbstractPayloadTransformerPars
if (StringUtils.hasText(sourceFactory)) {
builder.addPropertyReference("sourceFactory", sourceFactory);
}
- String resultFactory = element.getAttribute("result-factory");
- if (StringUtils.hasText(resultFactory)) {
- builder.addPropertyReference("resultFactory", resultFactory);
- }
- if(StringUtils.hasText(resultTransformer)){
+ resultFactoryHelper.assertResultFactoryAndTypeValid(resultFactory, resultType);
+ resultFactoryHelper.addResultFactory(builder, resultType, 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 67403bd51c..f20f411d68 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
@@ -1,23 +1,16 @@
-
-
-
-
-
-
@@ -26,8 +19,7 @@
-
+
@@ -37,10 +29,10 @@
-
+
-
@@ -53,8 +45,6 @@
use="required" />
-
-
@@ -71,11 +61,18 @@
use="optional" />
-
+
+
+
+
+
+
+
+
+
-
-
@@ -92,5 +89,4 @@
default="false" />
-
\ No newline at end of file
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 361492d143..dfa34bf3f3 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
@@ -14,6 +14,12 @@
+
+
+
+
+
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 d80912b61e..7d6d907655 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
@@ -31,7 +31,9 @@ import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.message.Message;
import org.springframework.integration.transformer.Transformer;
+import org.springframework.integration.xml.config.StubResultFactory.StubStringResult;
import org.springframework.integration.xml.util.XmlTestUtil;
+import org.springframework.xml.transform.StringResult;
/**
* @author Jonas Partner
@@ -81,5 +83,28 @@ public class XsltPayloadTransformerParserTests {
String strResult = (String)result.getPayload();
assertEquals("Wrong payload", "testReturn", strResult);
}
+
+ @Test
+ public void testWithResourceProvidedndStubResultFactory() throws Exception {
+ Transformer transformer = (Transformer) applicationContext
+ .getBean("xsltTransformerWithTemplatesAndResultFactory");
+ GenericMessage