View Javadoc

1   /*
2    * $Id: DomXmlTransformersTestCase.java 22377 2011-07-11 12:41:42Z 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.junit.Test;
36  import org.w3c.dom.Document;
37  import org.w3c.dom.Node;
38  
39  import static org.junit.Assert.assertNotNull;
40  import static org.junit.Assert.assertTrue;
41  
42  public class DomXmlTransformersTestCase extends AbstractXmlTransformerTestCase
43  {
44  
45      private String srcData;
46      private Document resultData;
47  
48      @Override
49      protected void doSetUp() throws Exception
50      {
51          srcData = IOUtils.getResourceAsString("cdcatalog.xml", getClass());
52          org.dom4j.Document dom4jDoc = DocumentHelper.parseText(srcData);
53          resultData = new DOMWriter().write(dom4jDoc);
54      }
55  
56      @Override
57      public Transformer getTransformer() throws Exception
58      {
59          XmlToDomDocument trans = createObject(XmlToDomDocument.class);
60          trans.setReturnDataType(DataTypeFactory.create(org.w3c.dom.Document.class));
61          return trans;
62      }
63  
64      @Override
65      public Transformer getRoundTripTransformer() throws Exception
66      {
67          DomDocumentToXml trans = createObject(DomDocumentToXml.class);
68          trans.setReturnDataType(DataTypeFactory.STRING);
69          return trans;
70      }
71  
72      @Override
73      public Object getTestData()
74      {
75          return srcData;
76      }
77  
78      @Override
79      public Object getResultData()
80      {
81          return resultData;
82      }
83  
84      @Test
85      public void testTransformXMLStreamReader() throws Exception
86      {
87          Object expectedResult = getResultData();
88          assertNotNull(expectedResult);
89          
90          XmlToDomDocument transformer = (XmlToDomDocument) getTransformer();
91          
92          InputStream is = IOUtils.getResourceAsStream("cdcatalog.xml", XMLTestUtils.class);
93          XMLStreamReader sr = XMLUtils.toXMLStreamReader(transformer.getXMLInputFactory(), is);
94  
95          Object result = transformer.transform(sr);
96          writeXml((Node) result, System.out);
97          assertNotNull(result);
98          assertTrue("expected: " + expectedResult + "\nresult: " + result, compareResults(expectedResult, result));
99      }
100 
101     public static void writeXml(Node n, OutputStream os) throws TransformerException {
102         TransformerFactory tf = TransformerFactory.newInstance();
103         // identity
104         javax.xml.transform.Transformer t = tf.newTransformer();
105         t.setOutputProperty(OutputKeys.INDENT, "yes");
106         t.transform(new DOMSource(n), new StreamResult(os));
107     }
108     
109     @Test
110     public void testAllXmlMessageTypes() throws Exception
111     {
112         List list = XMLTestUtils.getXmlMessageVariants("cdcatalog.xml");
113         Iterator it = list.iterator();
114         
115         Object expectedResult = getResultData();
116         assertNotNull(expectedResult);
117         
118         Object msg, result;
119         while (it.hasNext())
120         {
121             msg = it.next();
122             result = getTransformer().transform(msg);
123             assertNotNull(result);
124             assertTrue("Test failed for message type: " + msg.getClass(), compareResults(expectedResult, result));
125         }
126     }
127 
128 }