View Javadoc

1   /*
2    * $Id: DomXmlTransformersTestCase.java 19250 2010-08-30 16:53:14Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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          // identity
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 }