View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
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          // identity
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 }