diff --git a/spring-integration-xml/.project b/spring-integration-xml/.project
index 7703a895bf..acec842bf2 100644
--- a/spring-integration-xml/.project
+++ b/spring-integration-xml/.project
@@ -20,8 +20,14 @@
+
+ org.springframework.ide.eclipse.core.springbuilder
+
+
+
+ org.springframework.ide.eclipse.core.springnature
org.maven.ide.eclipse.maven2Nature
org.eclipse.jdt.core.javanature
org.eclipse.wst.common.project.facet.core.nature
diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java
index f2080d6115..96c2380bc2 100644
--- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java
+++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/config/XsltPayloadTransformerParser.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2008 the original author or authors.
+ * Copyright 2002-2010 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,18 +16,25 @@
package org.springframework.integration.xml.config;
-import org.w3c.dom.Element;
+import java.util.List;
+import java.util.Map;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.ManagedMap;
+import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.beans.factory.xml.ParserContext;
import org.springframework.integration.config.xml.AbstractTransformerParser;
import org.springframework.integration.config.xml.IntegrationNamespaceUtils;
import org.springframework.util.Assert;
+import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
+import org.springframework.util.xml.DomUtils;
+import org.w3c.dom.Element;
/**
* @author Jonas Partner
* @author Mark Fisher
+ * @author Oleg Zhurakousky
*/
public class XsltPayloadTransformerParser extends AbstractTransformerParser {
@@ -43,6 +50,7 @@ public class XsltPayloadTransformerParser extends AbstractTransformerParser {
String resultTransformer = element.getAttribute("result-transformer");
String resultFactory = element.getAttribute("result-factory");
String resultType = element.getAttribute("result-type");
+ IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, element, "xslt-param-headers");
Assert.isTrue(StringUtils.hasText(xslResource) ^ StringUtils.hasText(xslTemplates),
"Exactly one of 'xsl-resource' or 'xsl-templates' is required.");
if (StringUtils.hasText(xslResource)) {
@@ -55,7 +63,33 @@ public class XsltPayloadTransformerParser extends AbstractTransformerParser {
if (StringUtils.hasText(resultTransformer)) {
builder.addConstructorArgReference(resultTransformer);
}
+
+ List xslParameterElements = DomUtils.getChildElementsByTagName(element, "xslt-param");
+ if (!CollectionUtils.isEmpty(xslParameterElements)) {
+ Map xslParameterMappings = new ManagedMap();
+ for (Element xslParameterElement : xslParameterElements) {
+ String name = xslParameterElement.getAttribute("name");
+
+ String expression = xslParameterElement.getAttribute("expression");
+ String value = xslParameterElement.getAttribute("value");
+ Assert.isTrue(StringUtils.hasText(expression) ^ StringUtils.hasText(value),
+ "Exactly one of 'expression' or 'value' is required.");
+
+ RootBeanDefinition expressionDef = null;
+ if (StringUtils.hasText(value)){
+ expressionDef = new RootBeanDefinition("org.springframework.expression.common.LiteralExpression");
+ expressionDef.getConstructorArgumentValues().addGenericArgumentValue(value);
+ } else if (StringUtils.hasText(expression)){
+ expressionDef = new RootBeanDefinition("org.springframework.integration.config.ExpressionFactoryBean");
+ expressionDef.getConstructorArgumentValues().addGenericArgumentValue(expression);
+ }
+ if (expressionDef != null) {
+ xslParameterMappings.put(name, expressionDef);
+ }
+ }
+ builder.addPropertyValue("xslParameterMappings", xslParameterMappings);
+ }
+
IntegrationNamespaceUtils.setReferenceIfAttributeDefined(builder, element, "source-factory");
}
-
}
diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurer.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurer.java
deleted file mode 100644
index 9964e65425..0000000000
--- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurer.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright 2002-2010 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.transformer;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.xml.transform.Transformer;
-
-import org.springframework.integration.Message;
-import org.springframework.integration.MessageHeaders;
-
-/**
- * {@link TransformerConfigurer} instance which looks for headers and uses them
- * to configure the provided {@link Transformer} instance. For example a header
- * named 'xslt_parameter_X' will cause the transformer to be configured with a
- * property named 'X' with the value of the header. A property named
- * 'xslt_output_property_X' will cause an output property on the transformer to be
- * set with this header's value.
- *
- * @author Jonas Partner
- */
-public class DefaultTransformerConfigurer implements TransformerConfigurer {
-
- public void configureTransformer(Message> message, Transformer transformer) {
- Map parameters = extractParameterHeaders(message.getHeaders());
- for (String paramName: parameters.keySet()) {
- transformer.setParameter(paramName, parameters.get(paramName));
- }
- Map outputProperties = extractOutputPropertyHeaders(message.getHeaders());
- for (String outputPropertyName : outputProperties.keySet()) {
- transformer.setOutputProperty(outputPropertyName, outputProperties.get(outputPropertyName));
- }
- }
-
- protected Map extractOutputPropertyHeaders(MessageHeaders headers) {
- Map parameters = new HashMap();
- int prefixStringLength = XsltHeaders.OUTPUT_PROPERTY.length();
- for (String key : headers.keySet()) {
- if (key.startsWith(XsltHeaders.OUTPUT_PROPERTY)) {
- Object headerValue = headers.get(key);
- if (!(headerValue instanceof String)) {
- throw new IllegalArgumentException(
- "XSLT Transformer only supports String output properties received header of type "
- + headerValue.getClass().getName()
- + " for header named " + key);
- }
- parameters.put(key.substring(prefixStringLength), (String) headerValue);
- }
- }
- return parameters;
- }
-
- protected Map extractParameterHeaders(MessageHeaders headers) {
- Map parameters = new HashMap();
- int prefixStringLength = XsltHeaders.PARAMETER.length();
- for (String key : headers.keySet()) {
- if (key.startsWith(XsltHeaders.PARAMETER)) {
- parameters.put(key.substring(prefixStringLength), headers.get(key));
- }
- }
- return parameters;
- }
-
-}
diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/TransformerConfigurer.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/TransformerConfigurer.java
deleted file mode 100644
index 3cac0c49aa..0000000000
--- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/TransformerConfigurer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright 2002-2010 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.transformer;
-
-import javax.xml.transform.Transformer;
-
-import org.springframework.integration.Message;
-
-/**
- * Allows customization of the transformer based on the received message prior to transformation.
- *
- * @author Jonas Partner
- */
-public interface TransformerConfigurer {
-
- /**
- * Callback method called by XSLT transformer implementations after transformer is created.
- */
- public void configureTransformer(Message> message, Transformer transformer);
-
-}
diff --git a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java
index 15cc5d7e30..d46c57f3bc 100644
--- a/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java
+++ b/spring-integration-xml/src/main/java/org/springframework/integration/xml/transformer/XsltPayloadTransformer.java
@@ -16,6 +16,10 @@
package org.springframework.integration.xml.transformer;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
@@ -27,10 +31,16 @@ import javax.xml.transform.dom.DOMResult;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamSource;
-import org.w3c.dom.Document;
-
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.context.expression.MapAccessor;
import org.springframework.core.io.Resource;
+import org.springframework.expression.Expression;
+import org.springframework.expression.ExpressionParser;
+import org.springframework.expression.spel.standard.SpelExpressionParser;
+import org.springframework.expression.spel.support.StandardEvaluationContext;
import org.springframework.integration.Message;
+import org.springframework.integration.MessageHeaders;
import org.springframework.integration.MessagingException;
import org.springframework.integration.transformer.AbstractTransformer;
import org.springframework.integration.xml.result.DomResultFactory;
@@ -40,8 +50,7 @@ import org.springframework.integration.xml.source.SourceFactory;
import org.springframework.util.Assert;
import org.springframework.xml.transform.StringResult;
import org.springframework.xml.transform.StringSource;
-
-import java.io.IOException;
+import org.w3c.dom.Document;
/**
* Thread safe XSLT transformer implementation which returns a transformed
@@ -65,10 +74,16 @@ import java.io.IOException;
*
* @author Jonas Partner
* @author Mark Fisher
+ * @author Oleg Zhurakousky
*/
public class XsltPayloadTransformer extends AbstractTransformer {
+ private final Log logger = LogFactory.getLog(this.getClass());
+ private final Map expressionCache = new HashMap();
private final Templates templates;
+ private final StandardEvaluationContext context = new StandardEvaluationContext();
+ private ExpressionParser spelParser = new SpelExpressionParser();
+ private Map xslParameterMappings;
private final ResultTransformer resultTransformer;
@@ -78,8 +93,7 @@ public class XsltPayloadTransformer extends AbstractTransformer {
private volatile boolean alwaysUseSourceResultFactories = false;
- private volatile TransformerConfigurer transformerConfigurer = new DefaultTransformerConfigurer();
-
+ private String[] xsltParamHeaders;
public XsltPayloadTransformer(Templates templates) throws ParserConfigurationException {
this(templates, null);
@@ -195,12 +209,70 @@ public class XsltPayloadTransformer extends AbstractTransformer {
return (Document) domResult.getNode();
}
+ @SuppressWarnings("unchecked")
protected Transformer buildTransformer(Message> message) throws TransformerException {
Transformer transformer = this.templates.newTransformer();
- if (this.transformerConfigurer != null) {
- this.transformerConfigurer.configureTransformer(message, transformer);
+ context.setRootObject(message);
+ context.addPropertyAccessor(new MapAccessor());
+ if (xslParameterMappings != null){
+ for (String parameterName: xslParameterMappings.keySet()) {
+ Expression expression = xslParameterMappings.get(parameterName);
+ Object value = null;
+ try {
+ value = expression.getValue(context);
+ transformer.setParameter(parameterName, value);
+ } catch (Exception e) {
+ logger.warn("Header expression '" + expression.getExpressionString() + "' can not resolve within current message and will not be mapped to XSLT parameter");
+ }
+ }
+ }
+ MessageHeaders headers = message.getHeaders();
+ if (xsltParamHeaders != null){
+ for (String headerPattern : xsltParamHeaders) {
+ if (headerPattern.contains("*")){
+ Expression expression = expressionCache.get(headerPattern);
+ Map filteredHeaders = null;
+ if (expression == null){
+ if (headerPattern.startsWith("*")){
+ headerPattern = headerPattern.replace("*", "");
+ expression = spelParser.parseExpression("headers.?[key.endsWith('" + headerPattern + "')]");
+ } else if (headerPattern.endsWith("*")){
+ headerPattern = headerPattern.replace("*", "");
+ expression = spelParser.parseExpression("headers.?[key.startsWith('" + headerPattern + "')]");
+ } else {
+ throw new IllegalArgumentException("Can not match the following header name pattern '" + headerPattern + "'");
+ }
+ expressionCache.put(headerPattern, expression);
+ }
+ filteredHeaders = (Map)expression.getValue(context);
+ for (String headerName : filteredHeaders.keySet()) {
+ transformer.setParameter(headerName, filteredHeaders.get(headerName));
+ }
+ } else {
+ Object value = headers.get(headerPattern);
+ if (value != null){
+ transformer.setParameter(headerPattern, headers.get(headerPattern));
+ } else{
+ logger.warn("Header with the name '" + headerPattern + "' is not present in the current message and will not be mapped to XSLT parameter");
+ }
+ }
+ }
}
return transformer;
}
+ public Map getXslParameterMappings() {
+ return xslParameterMappings;
+ }
+
+ public void setXslParameterMappings(Map xslParameterMappings) {
+ this.xslParameterMappings = xslParameterMappings;
+ }
+ public String[] getXsltParamHeaders() {
+ return xsltParamHeaders;
+ }
+
+ public void setXsltParamHeaders(String[] xsltParamHeaders) {
+ this.xsltParamHeaders = xsltParamHeaders;
+ }
}
diff --git a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
index bbba6eff03..70b791a813 100644
--- a/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
+++ b/spring-integration-xml/src/main/resources/org/springframework/integration/xml/config/spring-integration-xml-2.0.xsd
@@ -107,6 +107,10 @@
+
+
+
+
@@ -558,5 +562,11 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurerTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurerTests.java
deleted file mode 100644
index 61106f5849..0000000000
--- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/DefaultTransformerConfigurerTests.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- * Copyright 2002-2010 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.transformer;
-
-import static org.junit.Assert.*;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
-import javax.xml.transform.ErrorListener;
-import javax.xml.transform.Result;
-import javax.xml.transform.Source;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.URIResolver;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.springframework.integration.Message;
-import org.springframework.integration.core.MessageBuilder;
-
-/**
- * @author Jonas Partner
- */
-public class DefaultTransformerConfigurerTests {
-
- StubTransformer transformer;
-
- DefaultTransformerConfigurer transformerConfigurer;
-
- @Before
- public void setUp(){
- this.transformer = new StubTransformer();
- this.transformerConfigurer = new DefaultTransformerConfigurer();
- }
-
- @Test
- public void testSettingParametersAndOutputProperties(){
- Message testMessage = MessageBuilder.withPayload("test")
- .setHeader("xslt_parameter_headerOne",1)
- .setHeader("xslt_parameter_headerTwo", "string")
- .setHeader("xslt_output_property_outOne","1")
- .setHeader("xslt_output_property_outTwo","2")
- .build();
- transformerConfigurer.configureTransformer(testMessage, transformer);
-
- Object paramOne = transformer.getParameter("headerOne");
- assertEquals("Wrong value for headerOne parameter",1, paramOne);
-
- Object paramTwo = transformer.getParameter("headerTwo");
- assertEquals("Wrong value for headerTwo parameter","string", paramTwo);
-
- String outPropertyOne = transformer.getOutputProperty("outOne");
- assertEquals("Wrong value for headerOne parameter","1", outPropertyOne);
-
- String outPropertyTwo = transformer.getOutputProperty("outTwo");
- assertEquals("Wrong value for headerTwo parameter","2", outPropertyTwo);
- }
-
- @Test(expected = IllegalArgumentException.class)
- public void testNonStringOutputPropertyHeader() {
- Message testMessage = MessageBuilder.withPayload("test")
- .setHeader("xslt_output_property_outOne",12)
- .build();
- transformerConfigurer.configureTransformer(testMessage, transformer);
- }
-
-
- private static class StubTransformer extends Transformer{
-
- Map parameterMap = new HashMap();
-
- Map outputProperties = new HashMap();
-
- @Override
- public void clearParameters() {
- parameterMap.clear();
- }
-
- @Override
- public ErrorListener getErrorListener() {
- return null;
- }
-
- @Override
- public Properties getOutputProperties() {
- return null;
- }
-
- @Override
- public String getOutputProperty(String name) throws IllegalArgumentException {
- return outputProperties.get(name);
- }
-
- @Override
- public Object getParameter(String name) {
- return parameterMap.get(name);
- }
-
- @Override
- public URIResolver getURIResolver() {
- return null;
- }
-
- @Override
- public void setErrorListener(ErrorListener listener) throws IllegalArgumentException {
- }
-
- @Override
- public void setOutputProperties(Properties oformat) {
- }
-
- @Override
- public void setOutputProperty(String name, String value) throws IllegalArgumentException {
- outputProperties.put(name, value);
- }
-
- @Override
- public void setParameter(String name, Object value) {
- parameterMap.put(name, value);
- }
-
- @Override
- public void setURIResolver(URIResolver resolver) {
- }
-
- @Override
- public void transform(Source xmlSource, Result outputTarget) throws TransformerException {
- }
- }
-
-}
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTests.java
index b9ae6c85d0..fc2f78f06e 100644
--- a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTests.java
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltPayloadTransformerTests.java
@@ -16,30 +16,30 @@
package org.springframework.integration.xml.transformer;
-import static junit.framework.Assert.assertEquals;
-import static junit.framework.Assert.assertTrue;
-import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
-
import javax.xml.transform.Result;
import javax.xml.transform.TransformerException;
import javax.xml.transform.dom.DOMResult;
import org.junit.Before;
import org.junit.Test;
-import org.w3c.dom.Document;
-
import org.springframework.core.io.ByteArrayResource;
-import org.springframework.core.io.Resource;
import org.springframework.core.io.ClassPathResource;
+import org.springframework.core.io.Resource;
import org.springframework.integration.Message;
import org.springframework.integration.MessagingException;
import org.springframework.integration.core.MessageBuilder;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.xml.transform.StringSource;
+import org.w3c.dom.Document;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual;
/**
* @author Jonas Partner
+ * @author Oleg Zhurakousky
*/
public class XsltPayloadTransformerTests {
@@ -128,15 +128,6 @@ public class XsltPayloadTransformerTests {
assertEquals(transformer.doTransform(buildMessage(docAsString)),
outputAsString);
}
-
- @Test
- public void testXslWithParameters() throws Exception {
- transformer = new XsltPayloadTransformer(getXslParameterResource());
- Message> message = MessageBuilder.withPayload(this.docAsString).setHeader("xslt_parameter_testParam", "testParamValue").build();
- Object returnedPayload = transformer.doTransform(message);
- assertEquals("Wrong payload type",String.class, returnedPayload.getClass());
- assertTrue("Param value not found in xslt output", ((String) returnedPayload).contains("testParamValue"));
- }
protected Message> buildMessage(Object payload) {
return MessageBuilder.withPayload(payload).build();
@@ -146,15 +137,6 @@ public class XsltPayloadTransformerTests {
String xsl = "test";
return new ByteArrayResource(xsl.getBytes("UTF-8"));
}
-
- private Resource getXslParameterResource() throws Exception {
- String xsl = ""
- + ""
- + "test"
- + "";
- return new ByteArrayResource(xsl.getBytes("UTF-8"));
- }
-
public static class StubResultTransformer implements ResultTransformer {
private Object objectToReturn;
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests-context.xml b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests-context.xml
new file mode 100644
index 0000000000..aa7aace808
--- /dev/null
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests-context.xml
@@ -0,0 +1,46 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests.java b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests.java
new file mode 100644
index 0000000000..a07c689f8d
--- /dev/null
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/XsltTransformerTests.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2002-2010 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.transformer;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.context.ApplicationContext;
+import org.springframework.integration.Message;
+import org.springframework.integration.channel.QueueChannel;
+import org.springframework.integration.core.MessageBuilder;
+import org.springframework.integration.core.MessageChannel;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
+
+import static org.junit.Assert.assertFalse;
+
+import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertTrue;
+
+/**
+ * @author Oleg Zhurakousky
+ *
+ */
+@ContextConfiguration
+@RunWith(SpringJUnit4ClassRunner.class)
+public class XsltTransformerTests {
+ private String docAsString = "test";
+ @Autowired
+ private ApplicationContext applicationContext;
+ @Autowired
+ @Qualifier("output")
+ private QueueChannel output;
+ @Test
+ public void testParamHeadersWithStartWildCharacter(){
+ MessageChannel input = applicationContext.getBean("paramHeadersWithStartWildCharacterChannel", MessageChannel.class);
+ Message> message = MessageBuilder.withPayload(this.docAsString).
+ setHeader("testParam", "testParamValue").
+ setHeader("testParam2", "FOO").
+ build();
+ input.send(message);
+ Message> resultMessage = output.receive();
+ System.out.println("Result: " + resultMessage);
+ assertEquals("Wrong payload type",String.class, resultMessage.getPayload().getClass());
+ assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
+ assertFalse(((String) resultMessage.getPayload()).contains("FOO"));
+ }
+ @Test
+ public void testParamHeadersWithEndWildCharacter(){
+ MessageChannel input = applicationContext.getBean("paramHeadersWithEndWildCharacterChannel", MessageChannel.class);
+ Message> message = MessageBuilder.withPayload(this.docAsString).
+ setHeader("testParam", "testParamValue").
+ setHeader("testParam2", "FOO").
+ build();
+ input.send(message);
+ Message> resultMessage = output.receive();
+ System.out.println("Result: " + resultMessage);
+ assertEquals("Wrong payload type",String.class, resultMessage.getPayload().getClass());
+ assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
+ assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
+ }
+ @Test
+ public void testParamHeadersWithIndividualParameters(){
+ MessageChannel input = applicationContext.getBean("paramHeadersWithIndividualParametersChannel", MessageChannel.class);
+ Message> message = MessageBuilder.withPayload(this.docAsString).
+ setHeader("testParam", "testParamValue").
+ setHeader("testParam2", "FOO").
+ build();
+ input.send(message);
+ Message> resultMessage = output.receive();
+ System.out.println("Result: " + resultMessage);
+ assertEquals("Wrong payload type",String.class, resultMessage.getPayload().getClass());
+ assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
+ assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
+ assertTrue(((String) resultMessage.getPayload()).contains("hello"));
+ }
+
+ @Test
+ public void testParamHeadersCombo(){
+ MessageChannel input = applicationContext.getBean("paramHeadersComboChannel", MessageChannel.class);
+ Message> message = MessageBuilder.withPayload(this.docAsString).
+ setHeader("testParam", "testParamValue").
+ setHeader("testParam2", "FOO").
+ build();
+ input.send(message);
+ Message> resultMessage = output.receive();
+ System.out.println("Result: " + resultMessage);
+ assertEquals("Wrong payload type",String.class, resultMessage.getPayload().getClass());
+ assertTrue(((String) resultMessage.getPayload()).contains("testParamValue"));
+ assertTrue(((String) resultMessage.getPayload()).contains("FOO"));
+ assertTrue(((String) resultMessage.getPayload()).contains("hello"));
+ }
+}
diff --git a/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/transformer.xslt b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/transformer.xslt
new file mode 100644
index 0000000000..0134f64fdd
--- /dev/null
+++ b/spring-integration-xml/src/test/java/org/springframework/integration/xml/transformer/transformer.xslt
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+ test
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file