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