Replace xmlunit dependecy with AssertJ methods

This commit is contained in:
Artem Bilan
2018-12-20 19:54:57 -05:00
committed by Gary Russell
parent 93d7c58b64
commit 0d09bdccd4
8 changed files with 224 additions and 202 deletions

View File

@@ -141,7 +141,6 @@ subprojects { subproject ->
springVersion = project.hasProperty('springVersion') ? project.springVersion : '5.1.3.RELEASE' springVersion = project.hasProperty('springVersion') ? project.springVersion : '5.1.3.RELEASE'
springWsVersion = '3.0.4.RELEASE' springWsVersion = '3.0.4.RELEASE'
tomcatVersion = "9.0.12" tomcatVersion = "9.0.12"
xmlUnitVersion = '1.6'
xstreamVersion = '1.4.11.1' xstreamVersion = '1.4.11.1'
} }
@@ -703,8 +702,6 @@ project('spring-integration-xml') {
compile "org.springframework:spring-oxm:$springVersion" compile "org.springframework:spring-oxm:$springVersion"
compile ("org.springframework.ws:spring-xml:$springWsVersion") compile ("org.springframework.ws:spring-xml:$springWsVersion")
compile ("org.springframework.ws:spring-ws-core:$springWsVersion") compile ("org.springframework.ws:spring-ws-core:$springWsVersion")
testCompile "xmlunit:xmlunit:$xmlUnitVersion"
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -16,8 +16,8 @@
package org.springframework.integration.xml; package org.springframework.integration.xml;
import static org.junit.Assert.assertEquals; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertTrue; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
@@ -30,9 +30,7 @@ import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.sax.SAXSource; import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamSource;
import org.custommonkey.xmlunit.XMLAssert; import org.junit.BeforeClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Node; import org.w3c.dom.Node;
@@ -40,6 +38,7 @@ import org.w3c.dom.NodeList;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
/** /**
@@ -50,80 +49,83 @@ import org.springframework.messaging.MessagingException;
*/ */
public class DefaultXmlPayloadConverterTests { public class DefaultXmlPayloadConverterTests {
private static final String TEST_DOCUMENT_AS_STRING = "<test>hello</test>"; private static final String TEST_DOCUMENT_AS_STRING =
"<?xml version=\"1.0\" encoding=\"UTF-8\"?><test>hello</test>";
private DefaultXmlPayloadConverter converter; private static final DefaultXmlPayloadConverter converter = new DefaultXmlPayloadConverter();
private Document testDocument; private static Document testDocument;
@Before @BeforeClass
public void setUp() throws Exception { public static void setUp() throws Exception {
converter = new DefaultXmlPayloadConverter(); testDocument =
testDocument = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse( DocumentBuilderFactory.newInstance()
new InputSource(new StringReader(TEST_DOCUMENT_AS_STRING))); .newDocumentBuilder()
.parse(new InputSource(new StringReader(TEST_DOCUMENT_AS_STRING)));
} }
@Test @Test
public void testGetDocumentWithString() { public void testGetDocumentWithString() throws Exception {
Document doc = converter.convertToDocument("<test>hello</test>"); Document doc = converter.convertToDocument(TEST_DOCUMENT_AS_STRING);
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
public void testGetDocumentWithDocument() { public void testGetDocumentWithDocument() {
Document doc = converter.convertToDocument(testDocument); Document doc = converter.convertToDocument(testDocument);
Assert.assertTrue(doc == testDocument); assertThat(doc).isSameAs(testDocument);
} }
@Test @Test
public void testGetNodePassingNode() { public void testGetNodePassingNode() {
Node element = testDocument.getElementsByTagName("test").item(0); Node element = testDocument.getElementsByTagName("test").item(0);
Node n = converter.convertToNode(element); Node n = converter.convertToNode(element);
assertTrue("Wrong node returned", element == n); assertThat(n).isSameAs(element);
} }
@Test @Test
public void testGetNodePassingString() { public void testGetNodePassingString() throws Exception {
Node n = converter.convertToNode("<test>hello</test>"); Node n = converter.convertToNode(TEST_DOCUMENT_AS_STRING);
XMLAssert.assertXMLEqual(testDocument, (Document) n); assertThat(XmlTestUtil.docToString((Document) n)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
public void testGetNodePassingDocument() { public void testGetNodePassingDocument() throws Exception {
Node n = converter.convertToNode(testDocument); Node n = converter.convertToNode(testDocument);
XMLAssert.assertXMLEqual(testDocument, (Document) n); assertThat(XmlTestUtil.docToString((Document) n)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
public void testGetSourcePassingDocument() throws Exception { public void testGetSourcePassingDocument() {
Source source = converter.convertToSource(testDocument); Source source = converter.convertToSource(testDocument);
assertEquals(DOMSource.class, source.getClass()); assertThat(source).isInstanceOf(DOMSource.class);
} }
@Test @Test
public void testGetSourcePassingString() throws Exception { public void testGetSourcePassingString() {
Source source = converter.convertToSource(TEST_DOCUMENT_AS_STRING); Source source = converter.convertToSource(TEST_DOCUMENT_AS_STRING);
assertEquals(DOMSource.class, source.getClass()); assertThat(source).isInstanceOf(DOMSource.class);
} }
@Test @Test
public void testGetSourcePassingSource() throws Exception { public void testGetSourcePassingSource() {
SAXSource passedInSource = new SAXSource(); SAXSource passedInSource = new SAXSource();
Source source = converter.convertToSource(passedInSource); Source source = converter.convertToSource(passedInSource);
assertEquals(source, passedInSource); assertThat(source).isEqualTo(passedInSource);
} }
@Test(expected = MessagingException.class) @Test
public void testInvalidPayload() { public void testInvalidPayload() {
converter.convertToSource(12); assertThatThrownBy(() -> converter.convertToSource(12))
.isExactlyInstanceOf(MessagingException.class);
} }
@Test @Test
public void testGetNodePassingDOMSource() { public void testGetNodePassingDOMSource() {
Node element = testDocument.getElementsByTagName("test").item(0); Node element = testDocument.getElementsByTagName("test").item(0);
Node n = converter.convertToNode(new DOMSource(element)); Node n = converter.convertToNode(new DOMSource(element));
assertTrue("Wrong node returned", element == n); assertThat(n).isSameAs(element);
} }
@Test @Test
@@ -131,33 +133,33 @@ public class DefaultXmlPayloadConverterTests {
Node element = testDocument.getElementsByTagName("test").item(0); Node element = testDocument.getElementsByTagName("test").item(0);
Document doc = converter.convertToDocument(element); Document doc = converter.convertToDocument(element);
NodeList childNodes = doc.getChildNodes(); NodeList childNodes = doc.getChildNodes();
assertEquals(1, childNodes.getLength()); assertThat(childNodes.getLength()).isEqualTo(1);
assertEquals("test", childNodes.item(0).getNodeName()); assertThat(childNodes.item(0).getNodeName()).isEqualTo("test");
assertEquals("hello", childNodes.item(0).getTextContent()); assertThat(childNodes.item(0).getTextContent()).isEqualTo("hello");
} }
@Test @Test
public void testConvertSourceToDocument() throws Exception { public void testConvertSourceToDocument() {
Node element = testDocument.getElementsByTagName("test").item(0); Node element = testDocument.getElementsByTagName("test").item(0);
DOMSource domSource = new DOMSource(element); DOMSource domSource = new DOMSource(element);
Document doc = converter.convertToDocument(domSource); Document doc = converter.convertToDocument(domSource);
NodeList childNodes = doc.getChildNodes(); NodeList childNodes = doc.getChildNodes();
assertEquals(1, childNodes.getLength()); assertThat(childNodes.getLength()).isEqualTo(1);
assertEquals("test", childNodes.item(0).getNodeName()); assertThat(childNodes.item(0).getNodeName()).isEqualTo("test");
assertEquals("hello", childNodes.item(0).getTextContent()); assertThat(childNodes.item(0).getTextContent()).isEqualTo("hello");
} }
@Test @Test
public void testConvertBytesToDocument() throws Exception { public void testConvertBytesToDocument() throws Exception {
Document doc = converter.convertToDocument("<test>hello</test>".getBytes()); Document doc = converter.convertToDocument(TEST_DOCUMENT_AS_STRING.getBytes());
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
public void testConvertFileToDocument() throws Exception { public void testConvertFileToDocument() throws Exception {
File file = new ClassPathResource("org/springframework/integration/xml/customSource.data").getFile(); File file = new ClassPathResource("org/springframework/integration/xml/customSource.data").getFile();
Document doc = converter.convertToDocument(file); Document doc = converter.convertToDocument(file);
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
@@ -165,7 +167,7 @@ public class DefaultXmlPayloadConverterTests {
InputStream inputStream = new ClassPathResource("org/springframework/integration/xml/customSource.data") InputStream inputStream = new ClassPathResource("org/springframework/integration/xml/customSource.data")
.getInputStream(); .getInputStream();
Document doc = converter.convertToDocument(inputStream); Document doc = converter.convertToDocument(inputStream);
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
@@ -173,13 +175,13 @@ public class DefaultXmlPayloadConverterTests {
ClassPathResource resource = new ClassPathResource("org/springframework/integration/xml/customSource.data"); ClassPathResource resource = new ClassPathResource("org/springframework/integration/xml/customSource.data");
StreamSource source = new StreamSource(resource.getInputStream()); StreamSource source = new StreamSource(resource.getInputStream());
Document doc = converter.convertToDocument(source); Document doc = converter.convertToDocument(source);
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
@Test @Test
public void testConvertCustomSourceToDocument() throws Exception { public void testConvertCustomSourceToDocument() throws Exception {
Document doc = converter.convertToDocument(new MySource()); Document doc = converter.convertToDocument(new MySource());
XMLAssert.assertXMLEqual(testDocument, doc); assertThat(XmlTestUtil.docToString(doc)).isXmlEqualTo(TEST_DOCUMENT_AS_STRING);
} }
private static class MySource implements Source { private static class MySource implements Source {

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -16,9 +16,8 @@
package org.springframework.integration.xml.source; package org.springframework.integration.xml.source;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertNotNull;
import java.io.StringReader; import java.io.StringReader;
@@ -28,59 +27,55 @@ import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource; import javax.xml.transform.dom.DOMSource;
import org.junit.Before; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.xml.sax.InputSource; import org.xml.sax.InputSource;
import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
import org.springframework.xml.transform.StringResult;
/** /**
* @author Jonas Partner * @author Jonas Partner
* @author Artem Bilan
*/ */
public class DomSourceFactoryTests { public class DomSourceFactoryTests {
Document doc; private static final String docContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>testValue</root>";
DomSourceFactory sourceFactory; private static final DomSourceFactory sourceFactory = new DomSourceFactory();
String docContent = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root>testValue</root>"; private static Document doc;
@Before private static Transformer transformer;
public void setUp() throws Exception {
@BeforeClass
public static void setUp() throws Exception {
StringReader reader = new StringReader(docContent); StringReader reader = new StringReader(docContent);
doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader)); doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(new InputSource(reader));
sourceFactory = new DomSourceFactory(); transformer = TransformerFactory.newInstance().newTransformer();
} }
@Test @Test
public void testWithDocumentPayload() throws Exception { public void testWithDocumentPayload() throws Exception {
Source source = sourceFactory.createSource(doc); Source source = sourceFactory.createSource(doc);
assertNotNull("Returned source was null", source); assertThat(source).isNotNull();
assertEquals("Expected DOMSource", DOMSource.class, source.getClass()); assertThat(source).isInstanceOf(DOMSource.class);
assertXMLEqual("Wrong content in source ", docContent, getAsString(source)); assertThat(XmlTestUtil.sourceToString(source)).isXmlEqualTo(docContent);
} }
@Test @Test
public void testWithStringPayload() throws Exception { public void testWithStringPayload() throws Exception {
Source source = sourceFactory.createSource(docContent); Source source = sourceFactory.createSource(docContent);
assertNotNull("Returned source was null", source); assertThat(source).isNotNull();
assertEquals("Expected DOMSource", DOMSource.class, source.getClass()); assertThat(source).isInstanceOf(DOMSource.class);
assertXMLEqual("Wrong content in source ", docContent, getAsString(source)); assertThat(XmlTestUtil.sourceToString(source)).isXmlEqualTo(docContent);
} }
@Test(expected = MessagingException.class) @Test
public void testWithUnsupportedPayload() throws Exception { public void testWithUnsupportedPayload() {
sourceFactory.createSource(new Integer(12)); assertThatThrownBy(() -> sourceFactory.createSource(12))
} .isExactlyInstanceOf(MessagingException.class);
private String getAsString(Source source) throws Exception {
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringResult res = new StringResult();
transformer.transform(source, res);
return res.toString();
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -16,11 +16,11 @@
package org.springframework.integration.xml.source; package org.springframework.integration.xml.source;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import java.io.BufferedReader; import java.io.BufferedReader;
import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.w3c.dom.Document; import org.w3c.dom.Document;
@@ -28,14 +28,15 @@ import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
import org.springframework.xml.transform.StringSource; import org.springframework.xml.transform.StringSource;
/**
* @author Jonas Partner
* @author Mark Fisher
* @author Gary Russell
* @author Artem Bilan
*/
public class StringSourceTests { public class StringSourceTests {
StringSourceFactory sourceFactory; private static final StringSourceFactory sourceFactory = new StringSourceFactory();
@Before
public void setUp() throws Exception {
sourceFactory = new StringSourceFactory();
}
@Test @Test
public void testWithDocument() throws Exception { public void testWithDocument() throws Exception {
@@ -44,7 +45,8 @@ public class StringSourceTests {
StringSource source = (StringSource) sourceFactory.createSource(doc); StringSource source = (StringSource) sourceFactory.createSource(doc);
BufferedReader reader = new BufferedReader(source.getReader()); BufferedReader reader = new BufferedReader(source.getReader());
String docAsString = reader.readLine(); String docAsString = reader.readLine();
assertXMLEqual("Wrong content in StringSource", "<?xml version=\"1.0\" encoding=\"UTF-8\"?><item>one</item>", docAsString);
assertThat(docAsString).isXmlEqualTo(docString);
} }
@@ -54,18 +56,17 @@ public class StringSourceTests {
StringSource source = (StringSource) sourceFactory.createSource(docString); StringSource source = (StringSource) sourceFactory.createSource(docString);
BufferedReader reader = new BufferedReader(source.getReader()); BufferedReader reader = new BufferedReader(source.getReader());
String docAsString = reader.readLine(); String docAsString = reader.readLine();
assertXMLEqual("Wrong content in StringSource", "<?xml version=\"1.0\" encoding=\"UTF-8\"?><item>one</item>", docAsString);
assertThat(docAsString).isXmlEqualTo(docString);
} }
@Test(expected = MessagingException.class) @Test
public void testWithUnsupportedPayload() throws Exception { public void testWithUnsupportedPayload() {
String docString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><item>one</item>"; String docString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><item>one</item>";
StringBuffer buffer = new StringBuffer(docString); StringBuffer buffer = new StringBuffer(docString);
StringSource source = (StringSource) sourceFactory.createSource(buffer); assertThatThrownBy(() -> sourceFactory.createSource(buffer))
BufferedReader reader = new BufferedReader(source.getReader()); .isExactlyInstanceOf(MessagingException.class);
String docAsString = reader.readLine();
assertXMLEqual("Wrong content in StringSource", "<?xml version=\"1.0\" encoding=\"UTF-8\"?><item>one</item>", docAsString);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -16,9 +16,8 @@
package org.springframework.integration.xml.transformer; package org.springframework.integration.xml.transformer;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertTrue;
import java.util.Properties; import java.util.Properties;
@@ -37,12 +36,13 @@ import org.springframework.xml.transform.StringResult;
* @author Jonas Partner * @author Jonas Partner
* @author Dave Turanski * @author Dave Turanski
* @author Gunnar Hillert * @author Gunnar Hillert
* @author Artem Bilan
*/ */
public class ResultToStringTransformerTests { public class ResultToStringTransformerTests {
private ResultToStringTransformer transformer; private ResultToStringTransformer transformer;
private String doc = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>"; private String doc = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><order><orderItem>test</orderItem></order>";
@Before @Before
@@ -52,11 +52,11 @@ public class ResultToStringTransformerTests {
@Test @Test
public void testWithDomResult() throws Exception { public void testWithDomResult() throws Exception {
DOMResult result = XmlTestUtil.getDomResultForString(doc); DOMResult result = XmlTestUtil.getDomResultForString(this.doc);
Object transformed = transformer.transformResult(result); Object transformed = transformer.transformResult(result);
assertTrue("Wrong transformed type expected String", transformed instanceof String); assertThat(transformed).isInstanceOf(String.class);
String transformedString = (String) transformed; String transformedString = (String) transformed;
assertXMLEqual("Wrong content", doc, transformedString); assertThat(transformedString).isXmlEqualTo(this.doc);
} }
@Test @Test
@@ -67,24 +67,24 @@ public class ResultToStringTransformerTests {
outputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes"); outputProperties.setProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
transformer.setOutputProperties(outputProperties); transformer.setOutputProperties(outputProperties);
Object transformed = transformer.transformResult(domResult); Object transformed = transformer.transformResult(domResult);
assertTrue("Wrong transformed type expected String", transformed instanceof String); assertThat(transformed).isInstanceOf(String.class);
String transformedString = (String) transformed; String transformedString = (String) transformed;
assertEquals("Wrong content", formattedDoc, transformedString); assertThat(transformedString).isEqualTo(formattedDoc);
} }
@Test @Test
public void testWithStringResult() throws Exception { public void testWithStringResult() throws Exception {
StringResult result = XmlTestUtil.getStringResultForString(doc); StringResult result = XmlTestUtil.getStringResultForString(doc);
Object transformed = transformer.transformResult(result); Object transformed = transformer.transformResult(result);
assertTrue("Wrong transformed type expected String", transformed instanceof String); assertThat(transformed).isInstanceOf(String.class);
String transformedString = (String) transformed; String transformedString = (String) transformed;
assertXMLEqual("Wrong content", doc, transformedString); assertThat(transformedString).isXmlEqualTo(this.doc);
} }
@Test(expected = MessagingException.class) @Test
public void testWithUnsupportedSaxResult() throws Exception { public void testWithUnsupportedSaxResult() {
SAXResult result = new SAXResult(); assertThatThrownBy(() -> this.transformer.transformResult(new SAXResult()))
transformer.transformResult(result); .isExactlyInstanceOf(MessagingException.class);
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2017 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -16,9 +16,10 @@
package org.springframework.integration.xml.transformer; package org.springframework.integration.xml.transformer;
import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals; import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.junit.Assert.assertTrue;
import java.nio.charset.StandardCharsets;
import javax.xml.transform.Result; import javax.xml.transform.Result;
import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerException;
@@ -34,11 +35,12 @@ import org.springframework.beans.factory.BeanFactory;
import org.springframework.core.io.ByteArrayResource; import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource; import org.springframework.core.io.Resource;
import org.springframework.integration.support.MessageBuilder; import org.springframework.integration.xml.result.DomResultFactory;
import org.springframework.integration.xml.result.StringResultFactory; import org.springframework.integration.xml.result.StringResultFactory;
import org.springframework.integration.xml.util.XmlTestUtil; import org.springframework.integration.xml.util.XmlTestUtil;
import org.springframework.messaging.Message; import org.springframework.messaging.Message;
import org.springframework.messaging.MessagingException; import org.springframework.messaging.MessagingException;
import org.springframework.messaging.support.GenericMessage;
import org.springframework.xml.transform.StringResult; import org.springframework.xml.transform.StringResult;
import org.springframework.xml.transform.StringSource; import org.springframework.xml.transform.StringSource;
@@ -48,183 +50,200 @@ import org.springframework.xml.transform.StringSource;
* @author Oleg Zhurakousky * @author Oleg Zhurakousky
* @author Gunnar Hillert * @author Gunnar Hillert
* @author Mike Bazos * @author Mike Bazos
* @author Artem Bilan
*/ */
public class XsltPayloadTransformerTests { public class XsltPayloadTransformerTests {
private XsltPayloadTransformer transformer; private XsltPayloadTransformer transformer;
private final String docAsString = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>"; private final String docAsString =
"<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?><order><orderItem>test</orderItem></order>";
private final String outputAsString = "<bob>test</bob>"; private final String outputAsString = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><bob>test</bob>";
@Before @Before
public void setUp() throws Exception { public void setUp() {
transformer = new XsltPayloadTransformer(getXslResource()); this.transformer = new XsltPayloadTransformer(getXslResource());
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); this.transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); this.transformer.setAlwaysUseResultFactory(false);
this.transformer.afterPropertiesSet();
} }
@Test @Test
public void testDocumentAsPayload() throws Exception { public void testDocumentAsPayload() throws Exception {
Object transformed = transformer.doTransform(buildMessage(XmlTestUtil Message<?> message = new GenericMessage<>(XmlTestUtil.getDocumentForString(this.docAsString));
.getDocumentForString(docAsString))); Object transformed = this.transformer.doTransform(message);
assertTrue("Wrong return type for document payload", Document.class assertThat(transformed)
.isAssignableFrom(transformed.getClass())); .as("Wrong return type for document payload")
.isInstanceOf(Document.class);
Document transformedDocument = (Document) transformed; Document transformedDocument = (Document) transformed;
assertXMLEqual(outputAsString, XmlTestUtil assertThat(XmlTestUtil.docToString(transformedDocument)).isXmlEqualTo(this.outputAsString);
.docToString(transformedDocument));
} }
@Test @Test
public void testSourceAsPayload() throws Exception { public void testSourceAsPayload() throws Exception {
Object transformed = transformer GenericMessage<?> message = new GenericMessage<>(new StringSource(this.docAsString));
.doTransform(buildMessage(new StringSource(docAsString))); Object transformed = transformer.doTransform(message);
assertEquals("Wrong return type for source payload", DOMResult.class,
transformed.getClass()); assertThat(transformed)
.as("Wrong return type for document payload")
.isInstanceOf(DOMResult.class);
DOMResult result = (DOMResult) transformed; DOMResult result = (DOMResult) transformed;
assertXMLEqual("Document incorrect after transformation", XmlTestUtil assertThat(XmlTestUtil.docToString((Document) result.getNode()))
.getDocumentForString(outputAsString), (Document) result .as("Document incorrect after transformation")
.getNode()); .isXmlEqualTo(this.outputAsString);
} }
@Test @Test
public void testStringAsPayload() throws Exception { public void testStringAsPayload() throws Exception {
Object transformed = transformer.doTransform(buildMessage(docAsString)); Object transformed = this.transformer.doTransform(new GenericMessage<>(this.docAsString));
assertEquals("Wrong return type for string payload", String.class,
transformed.getClass()); assertThat(transformed)
.as("Wrong return type for document payload")
.isInstanceOf(String.class);
String transformedString = (String) transformed; String transformedString = (String) transformed;
assertXMLEqual("String incorrect after transform", outputAsString, assertThat(transformedString)
transformedString); .as("String incorrect after transform")
.isXmlEqualTo(this.outputAsString);
} }
@Test @Test
public void testStringAsPayloadUseResultFactoryTrue() throws Exception { public void testStringAsPayloadUseResultFactoryTrue() throws Exception {
transformer.setAlwaysUseResultFactory(true); this.transformer.setAlwaysUseResultFactory(true);
Object transformed = transformer.doTransform(buildMessage(docAsString)); Object transformed = transformer.doTransform(new GenericMessage<>(this.docAsString));
assertEquals("Wrong return type for useFactories true",
DOMResult.class, transformed.getClass()); assertThat(transformed)
.as("Wrong return type for useFactories true")
.isInstanceOf(DOMResult.class);
DOMResult result = (DOMResult) transformed; DOMResult result = (DOMResult) transformed;
assertXMLEqual("Document incorrect after transformation", XmlTestUtil assertThat(XmlTestUtil.docToString((Document) result.getNode()))
.getDocumentForString(outputAsString), (Document) result .as("Document incorrect after transformation")
.getNode()); .isXmlEqualTo(this.outputAsString);
} }
@Test @Test
public void testSourceWithResultTransformer() throws Exception { public void testSourceWithResultTransformer() throws Exception {
Integer returnValue = new Integer(13); Integer returnValue = 13;
transformer = new XsltPayloadTransformer(getXslResource(), XsltPayloadTransformer transformer = new XsltPayloadTransformer(getXslResource(),
new StubResultTransformer(returnValue)); new StubResultTransformer(returnValue));
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
Object transformed = transformer Object transformed = transformer
.doTransform(buildMessage(new StringSource(docAsString))); .doTransform(new GenericMessage<>(new StringSource(docAsString)));
assertEquals("Wrong value from result conversion", returnValue, assertThat(transformed).isEqualTo(returnValue);
transformed);
} }
@Test @Test
public void testXsltPayloadWithTransformerFactoryClassname() throws Exception { public void testXsltPayloadWithTransformerFactoryClassname() throws Exception {
Integer returnValue = new Integer(13); Integer returnValue = 13;
transformer = new XsltPayloadTransformer(getXslResource(), new StubResultTransformer(returnValue), XsltPayloadTransformer transformer =
"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl"); new XsltPayloadTransformer(getXslResource(), new StubResultTransformer(returnValue),
"com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
Object transformed = transformer Object transformed = transformer.doTransform(new GenericMessage<>(new StringSource(this.docAsString)));
.doTransform(buildMessage(new StringSource(docAsString))); assertThat(transformed)
assertEquals("Wrong value from result conversion", returnValue, .as("Wrong value from result conversion")
transformed); .isEqualTo(returnValue);
} }
@Test(expected = TransformerFactoryConfigurationError.class) @Test
public void testXsltPayloadWithBadTransformerFactoryClassname() throws Exception { public void testXsltPayloadWithBadTransformerFactoryClassname() {
transformer = new XsltPayloadTransformer(getXslResource(), "foo.bar.Baz"); XsltPayloadTransformer transformer = new XsltPayloadTransformer(getXslResource(), "foo.bar.Baz");
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); assertThatThrownBy(transformer::afterPropertiesSet)
transformer.doTransform(buildMessage(new StringSource(docAsString))); .isExactlyInstanceOf(TransformerFactoryConfigurationError.class);
} }
@Test(expected = TransformerException.class) @Test
public void testNonXmlString() throws Exception { public void testNonXmlString() {
transformer.doTransform(buildMessage("test")); assertThatThrownBy(() -> this.transformer.doTransform(new GenericMessage<>("test")))
.isExactlyInstanceOf(TransformerException.class);
} }
@Test(expected = MessagingException.class) @Test
public void testUnsupportedPayloadType() throws Exception { public void testUnsupportedPayloadType() {
transformer.doTransform(buildMessage(new Long(12))); assertThatThrownBy(() -> this.transformer.doTransform(new GenericMessage<>(12)))
.isExactlyInstanceOf(MessagingException.class);
} }
@Test @Test
public void testXsltWithImports() throws Exception { public void testXsltWithImports() throws Exception {
Resource resource = new ClassPathResource("transform-with-import.xsl", Resource resource = new ClassPathResource("transform-with-import.xsl", getClass());
this.getClass()); XsltPayloadTransformer transformer = new XsltPayloadTransformer(resource);
transformer = new XsltPayloadTransformer(resource);
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
assertEquals(transformer.doTransform(buildMessage(docAsString)), Object transformed = transformer.doTransform(new GenericMessage<>(this.docAsString));
outputAsString); assertThat(transformed).isEqualTo(this.outputAsString);
} }
@Test @Test
public void documentInStringResultOut() throws Exception { public void documentInStringResultOut() throws Exception {
Resource resource = new ClassPathResource("transform-with-import.xsl", Resource resource = new ClassPathResource("transform-with-import.xsl", getClass());
this.getClass()); XsltPayloadTransformer transformer = new XsltPayloadTransformer(resource);
transformer = new XsltPayloadTransformer(resource);
transformer.setResultFactory(new StringResultFactory()); transformer.setResultFactory(new StringResultFactory());
transformer.setAlwaysUseResultFactory(true); transformer.setAlwaysUseResultFactory(true);
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
Object returned = transformer.doTransform(buildMessage(XmlTestUtil.getDocumentForString(docAsString))); GenericMessage<Document> message = new GenericMessage<>(XmlTestUtil.getDocumentForString(this.docAsString));
assertEquals("Wrong type of return ", StringResult.class, returned.getClass()); Object transformed = transformer.doTransform(message);
assertThat(transformed)
.as("Wrong type of return")
.isInstanceOf(StringResult.class);
} }
@Test @Test
public void stringInDomResultOut() throws Exception { public void stringInDomResultOut() throws Exception {
Resource resource = new ClassPathResource("transform-with-import.xsl", Resource resource = new ClassPathResource("transform-with-import.xsl", getClass());
this.getClass()); XsltPayloadTransformer transformer = new XsltPayloadTransformer(resource);
transformer = new XsltPayloadTransformer(resource); transformer.setResultFactory(new DomResultFactory());
transformer.setResultFactory(new StringResultFactory());
transformer.setAlwaysUseResultFactory(true); transformer.setAlwaysUseResultFactory(true);
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
Object returned = transformer.doTransform(buildMessage(XmlTestUtil.getDocumentForString(docAsString))); GenericMessage<Document> message = new GenericMessage<>(XmlTestUtil.getDocumentForString(this.docAsString));
assertEquals("Wrong type of return ", StringResult.class, returned.getClass()); Object transformed = transformer.doTransform(message);
assertThat(transformed)
.as("Wrong type of return")
.isInstanceOf(DOMResult.class);
} }
@Test @Test
public void docInStringOut() throws Exception { public void docInStringOut() throws Exception {
transformer = new XsltPayloadTransformer(getXslResourceThatOutputsText()); XsltPayloadTransformer transformer = new XsltPayloadTransformer(getXslResourceThatOutputsText());
transformer.setResultFactory(new StringResultFactory()); transformer.setResultFactory(new StringResultFactory());
transformer.setAlwaysUseResultFactory(true); transformer.setAlwaysUseResultFactory(true);
transformer.setBeanFactory(Mockito.mock(BeanFactory.class)); transformer.setBeanFactory(Mockito.mock(BeanFactory.class));
transformer.afterPropertiesSet(); transformer.afterPropertiesSet();
Object returned = transformer.doTransform(buildMessage(XmlTestUtil.getDocumentForString(docAsString))); GenericMessage<Document> message = new GenericMessage<>(XmlTestUtil.getDocumentForString(this.docAsString));
assertEquals("Wrong type of return ", StringResult.class, returned.getClass()); Object transformed = transformer.doTransform(message);
assertEquals("Wrong content in string", "hello world", returned.toString()); assertThat(transformed)
.as("Wrong type of return")
.isInstanceOf(StringResult.class);
assertThat(transformed.toString()).isEqualTo("hello world");
} }
protected Message<?> buildMessage(Object payload) { private Resource getXslResource() {
return MessageBuilder.withPayload(payload).build();
}
private Resource getXslResource() throws Exception {
String xsl = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + 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:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" +
" <xsl:template match=\"order\">" + " <xsl:template match=\"order\">" +
" <bob>test</bob>" + " <bob>test</bob>" +
" </xsl:template>" + " </xsl:template>" +
"</xsl:stylesheet>"; "</xsl:stylesheet>";
return new ByteArrayResource(xsl.getBytes("UTF-8")); return new ByteArrayResource(xsl.getBytes(StandardCharsets.UTF_8));
} }
private Resource getXslResourceThatOutputsText() throws Exception { private Resource getXslResourceThatOutputsText() {
String xsl = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" + 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:stylesheet version=\"1.0\" xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\">" +
" <xsl:output method=\"text\" encoding=\"UTF-8\" />" + " <xsl:output method=\"text\" encoding=\"UTF-8\" />" +
" <xsl:template match=\"order\">hello world</xsl:template>" + " <xsl:template match=\"order\">hello world</xsl:template>" +
"</xsl:stylesheet>"; "</xsl:stylesheet>";
return new ByteArrayResource(xsl.getBytes("UTF-8")); return new ByteArrayResource(xsl.getBytes(StandardCharsets.UTF_8));
} }
public static class StubResultTransformer implements ResultTransformer { public static class StubResultTransformer implements ResultTransformer {
@@ -238,6 +257,7 @@ public class XsltPayloadTransformerTests {
public Object transformResult(Result result) { public Object transformResult(Result result) {
return objectToReturn; return objectToReturn;
} }
} }
} }

View File

@@ -1,5 +1,5 @@
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes"/> <xsl:output/>
<xsl:template match="order"> <xsl:template match="order">
<bob>test</bob> <bob>test</bob>
</xsl:template> </xsl:template>

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright 2002-2016 the original author or authors. * Copyright 2002-2018 the original author or authors.
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -34,9 +34,12 @@ import org.springframework.xml.transform.StringResult;
* Utility class for XML related testing * Utility class for XML related testing
* *
* @author Jonas Partner * @author Jonas Partner
* @author Artem Bilan
*/ */
public class XmlTestUtil { public class XmlTestUtil {
private static final TransformerFactory TRANSFORMER_FACTORY = TransformerFactory.newInstance();
private XmlTestUtil() { private XmlTestUtil() {
super(); super();
} }
@@ -74,9 +77,13 @@ public class XmlTestUtil {
return stringResult.toString(); return stringResult.toString();
} }
public static void transform(Source source, Result res) throws Exception { public static void transform(Source source, Result res) throws Exception {
TransformerFactory.newInstance().newTransformer().transform(source, res); TRANSFORMER_FACTORY.newTransformer().transform(source, res);
} }
public static String sourceToString(Source source) throws Exception {
StringResult res = new StringResult();
transform(source, res);
return res.toString();
}
} }