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.w3c.dom.Document;
36 import org.w3c.dom.Node;
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 public void testTransformXMLStreamReader() throws Exception
81 {
82 Object expectedResult = getResultData();
83 assertNotNull(expectedResult);
84
85 XmlToDomDocument transformer = (XmlToDomDocument) getTransformer();
86
87 InputStream is = IOUtils.getResourceAsStream("cdcatalog.xml", XMLTestUtils.class);
88 XMLStreamReader sr = XMLUtils.toXMLStreamReader(transformer.getXMLInputFactory(), is);
89
90 Object result = transformer.transform(sr);
91 writeXml((Node) result, System.out);
92 assertNotNull(result);
93 assertTrue("expected: " + expectedResult + "\nresult: " + result, compareResults(expectedResult, result));
94 }
95
96 public static void writeXml(Node n, OutputStream os) throws TransformerException {
97 TransformerFactory tf = TransformerFactory.newInstance();
98
99 javax.xml.transform.Transformer t = tf.newTransformer();
100 t.setOutputProperty(OutputKeys.INDENT, "yes");
101 t.transform(new DOMSource(n), new StreamResult(os));
102 }
103
104 public void testAllXmlMessageTypes() throws Exception
105 {
106 List list = XMLTestUtils.getXmlMessageVariants("cdcatalog.xml");
107 Iterator it = list.iterator();
108
109 Object expectedResult = getResultData();
110 assertNotNull(expectedResult);
111
112 Object msg, result;
113 while (it.hasNext())
114 {
115 msg = it.next();
116 result = getTransformer().transform(msg);
117 assertNotNull(result);
118 assertTrue("Test failed for message type: " + msg.getClass(), compareResults(expectedResult, result));
119 }
120 }
121
122 }