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