This commit is contained in:
Oleg Zhurakousky
2010-08-27 14:26:50 +00:00
parent 2e1ba3efc0
commit 12a82618c3
11 changed files with 312 additions and 297 deletions

View File

@@ -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<String> 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<String> testMessage = MessageBuilder.withPayload("test")
.setHeader("xslt_output_property_outOne",12)
.build();
transformerConfigurer.configureTransformer(testMessage, transformer);
}
private static class StubTransformer extends Transformer{
Map<String,Object> parameterMap = new HashMap<String, Object>();
Map<String, String> outputProperties = new HashMap<String, String>();
@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 {
}
}
}

View File

@@ -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 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\"><xsl:template match=\"order\"><bob>test</bob></xsl:template></xsl:stylesheet>";
return new ByteArrayResource(xsl.getBytes("UTF-8"));
}
private Resource getXslParameterResource() throws Exception {
String xsl = "<xsl:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">"
+ "<xsl:param name=\"testParam\"></xsl:param><xsl:output omit-xml-declaration=\"yes\"/><xsl:template match=\"order\">"
+ "<bob>test</bob><xsl:if test=\"$testParam\"><xsl:value-of select=\"$testParam\"/></xsl:if>"
+ "</xsl:template></xsl:stylesheet>";
return new ByteArrayResource(xsl.getBytes("UTF-8"));
}
public static class StubResultTransformer implements ResultTransformer {
private Object objectToReturn;

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:int="http://www.springframework.org/schema/integration"
xmlns:int-xml="http://www.springframework.org/schema/integration/xml"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration-2.0.xsd
http://www.springframework.org/schema/integration/xml http://www.springframework.org/schema/integration/xml/spring-integration-xml-2.0.xsd">
<int:channel id="output">
<int:queue />
</int:channel>
<int-xml:xslt-transformer id="paramHeadersWithStartWildCharacter"
input-channel="paramHeadersWithStartWildCharacterChannel"
output-channel="output"
xsl-resource="classpath:org/springframework/integration/xml/transformer/transformer.xslt"
xslt-param-headers="*Param, foo">
</int-xml:xslt-transformer>
<int-xml:xslt-transformer id="paramHeadersWithEndWildCharacter"
input-channel="paramHeadersWithEndWildCharacterChannel"
output-channel="output"
xsl-resource="classpath:org/springframework/integration/xml/transformer/transformer.xslt"
xslt-param-headers="testP*">
</int-xml:xslt-transformer>
<int-xml:xslt-transformer id="paramHeadersWithIndividualParameters"
input-channel="paramHeadersWithIndividualParametersChannel"
output-channel="output"
xsl-resource="classpath:org/springframework/integration/xml/transformer/transformer.xslt">
<int-xml:xslt-param name="testParam" expression="headers.testParam"/>
<int-xml:xslt-param name="testParam2" expression="headers.testParam2"/>
<int-xml:xslt-param name="unresolved" expression="headers.foo"/>
<int-xml:xslt-param name="testParam3" value="hello"/>
</int-xml:xslt-transformer>
<int-xml:xslt-transformer id="paramHeadersCombo"
input-channel="paramHeadersComboChannel"
output-channel="output"
xsl-resource="classpath:org/springframework/integration/xml/transformer/transformer.xslt"
xslt-param-headers="testP*">
<int-xml:xslt-param name="testParam3" value="hello"/>
</int-xml:xslt-transformer>
</beans>

View File

@@ -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 = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
@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"));
}
}

View File

@@ -0,0 +1,19 @@
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:param name="testParam"/>
<xsl:param name="testParam2"/>
<xsl:param name="testParam3"/>
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="order">
<bob>test</bob>
<sampleElementA>
<xsl:value-of select="$testParam" />
</sampleElementA>
<sampleElementB>
<xsl:value-of select="$testParam2" />
</sampleElementB>
<sampleElementC>
<xsl:value-of select="$testParam3" />
</sampleElementC>
</xsl:template>
</xsl:stylesheet>