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