1
2
3
4
5
6
7
8
9
10
11 package org.mule.transformers.xml;
12
13 import org.mule.api.transformer.Transformer;
14 import org.mule.module.xml.transformer.DomDocumentToXml;
15 import org.mule.module.xml.transformer.XmlToDomDocument;
16 import org.mule.module.xml.util.XMLTestUtils;
17 import org.mule.module.xml.util.XMLUtils;
18 import org.mule.transformer.types.DataTypeFactory;
19 import org.mule.util.IOUtils;
20
21 import java.io.InputStream;
22 import java.io.OutputStream;
23 import java.util.Iterator;
24 import java.util.List;
25
26 import javax.xml.stream.XMLStreamReader;
27 import javax.xml.transform.OutputKeys;
28 import javax.xml.transform.TransformerException;
29 import javax.xml.transform.TransformerFactory;
30 import javax.xml.transform.dom.DOMSource;
31 import javax.xml.transform.stream.StreamResult;
32
33 import org.dom4j.DocumentHelper;
34 import org.dom4j.io.DOMWriter;
35 import org.junit.Test;
36 import org.w3c.dom.Document;
37 import org.w3c.dom.Node;
38
39 import static org.junit.Assert.assertNotNull;
40 import static org.junit.Assert.assertTrue;
41
42 public class DomXmlTransformersTestCase extends AbstractXmlTransformerTestCase
43 {
44
45 private String srcData;
46 private Document resultData;
47
48 @Override
49 protected void doSetUp() throws Exception
50 {
51 srcData = IOUtils.getResourceAsString("cdcatalog.xml", getClass());
52 org.dom4j.Document dom4jDoc = DocumentHelper.parseText(srcData);
53 resultData = new DOMWriter().write(dom4jDoc);
54 }
55
56 @Override
57 public Transformer getTransformer() throws Exception
58 {
59 XmlToDomDocument trans = createObject(XmlToDomDocument.class);
60 trans.setReturnDataType(DataTypeFactory.create(org.w3c.dom.Document.class));
61 return trans;
62 }
63
64 @Override
65 public Transformer getRoundTripTransformer() throws Exception
66 {
67 DomDocumentToXml trans = createObject(DomDocumentToXml.class);
68 trans.setReturnDataType(DataTypeFactory.STRING);
69 return trans;
70 }
71
72 @Override
73 public Object getTestData()
74 {
75 return srcData;
76 }
77
78 @Override
79 public Object getResultData()
80 {
81 return resultData;
82 }
83
84 @Test
85 public void testTransformXMLStreamReader() throws Exception
86 {
87 Object expectedResult = getResultData();
88 assertNotNull(expectedResult);
89
90 XmlToDomDocument transformer = (XmlToDomDocument) getTransformer();
91
92 InputStream is = IOUtils.getResourceAsStream("cdcatalog.xml", XMLTestUtils.class);
93 XMLStreamReader sr = XMLUtils.toXMLStreamReader(transformer.getXMLInputFactory(), is);
94
95 Object result = transformer.transform(sr);
96 writeXml((Node) result, System.out);
97 assertNotNull(result);
98 assertTrue("expected: " + expectedResult + "\nresult: " + result, compareResults(expectedResult, result));
99 }
100
101 public static void writeXml(Node n, OutputStream os) throws TransformerException {
102 TransformerFactory tf = TransformerFactory.newInstance();
103
104 javax.xml.transform.Transformer t = tf.newTransformer();
105 t.setOutputProperty(OutputKeys.INDENT, "yes");
106 t.transform(new DOMSource(n), new StreamResult(os));
107 }
108
109 @Test
110 public void testAllXmlMessageTypes() throws Exception
111 {
112 List list = XMLTestUtils.getXmlMessageVariants("cdcatalog.xml");
113 Iterator it = list.iterator();
114
115 Object expectedResult = getResultData();
116 assertNotNull(expectedResult);
117
118 Object msg, result;
119 while (it.hasNext())
120 {
121 msg = it.next();
122 result = getTransformer().transform(msg);
123 assertNotNull(result);
124 assertTrue("Test failed for message type: " + msg.getClass(), compareResults(expectedResult, result));
125 }
126 }
127
128 }