KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > dom4j > RoundTripTest


1 /*
2  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
3  *
4  * This software is open source.
5  * See the bottom of this file for the licence.
6  */

7
8 package org.dom4j;
9
10 import junit.textui.TestRunner;
11
12 import java.io.StringReader JavaDoc;
13 import java.io.StringWriter JavaDoc;
14
15 import javax.xml.transform.Transformer JavaDoc;
16 import javax.xml.transform.TransformerFactory JavaDoc;
17 import javax.xml.transform.stream.StreamResult JavaDoc;
18 import javax.xml.transform.stream.StreamSource JavaDoc;
19
20 import org.dom4j.io.DOMReader;
21 import org.dom4j.io.DOMWriter;
22 import org.dom4j.io.DocumentResult;
23 import org.dom4j.io.DocumentSource;
24 import org.dom4j.io.SAXContentHandler;
25 import org.dom4j.io.SAXReader;
26 import org.dom4j.io.SAXWriter;
27 import org.dom4j.io.XMLWriter;
28
29 /**
30  * A test harness to test the the round trips of Documents.
31  *
32  * @author <a HREF="mailto:jstrachan@apache.org">James Strachan </a>
33  * @version $Revision: 1.4 $
34  */

35 public class RoundTripTest extends AbstractTestCase {
36     protected String JavaDoc[] testDocuments = {"/xml/test/encode.xml",
37             "/xml/fibo.xml", "/xml/test/schema/personal-prefix.xsd",
38             "/xml/test/soap2.xml", "/xml/test/test_schema.xml"};
39
40     public static void main(String JavaDoc[] args) {
41         TestRunner.run(RoundTripTest.class);
42     }
43
44     // Test case(s)
45
// -------------------------------------------------------------------------
46
public void testTextRoundTrip() throws Exception JavaDoc {
47         for (int i = 0, size = testDocuments.length; i < size; i++) {
48             Document doc = getDocument(testDocuments[i]);
49             roundTripText(doc);
50         }
51     }
52
53     public void testSAXRoundTrip() throws Exception JavaDoc {
54         for (int i = 0, size = testDocuments.length; i < size; i++) {
55             Document doc = getDocument(testDocuments[i]);
56             roundTripSAX(doc);
57         }
58     }
59
60     public void testDOMRoundTrip() throws Exception JavaDoc {
61         for (int i = 0, size = testDocuments.length; i < size; i++) {
62             Document doc = getDocument(testDocuments[i]);
63             roundTripDOM(doc);
64         }
65     }
66
67     public void testJAXPRoundTrip() throws Exception JavaDoc {
68         for (int i = 0, size = testDocuments.length; i < size; i++) {
69             Document doc = getDocument(testDocuments[i]);
70             roundTripJAXP(doc);
71         }
72     }
73
74     public void testFullRoundTrip() throws Exception JavaDoc {
75         for (int i = 0, size = testDocuments.length; i < size; i++) {
76             Document doc = getDocument(testDocuments[i]);
77             roundTripFull(doc);
78         }
79     }
80
81     public void testRoundTrip() throws Exception JavaDoc {
82         Document document = getDocument("/xml/xmlspec.xml");
83
84         // Document doc1 = roundTripText( document );
85
Document doc1 = roundTripSAX(document);
86         Document doc2 = roundTripDOM(doc1);
87         Document doc3 = roundTripSAX(doc2);
88         Document doc4 = roundTripText(doc3);
89         Document doc5 = roundTripDOM(doc4);
90
91         // Document doc5 = roundTripDOM( doc3 );
92
assertDocumentsEqual(document, doc5);
93     }
94
95     // Implementation methods
96
// -------------------------------------------------------------------------
97
protected Document roundTripDOM(Document document) throws Exception JavaDoc {
98         // now lets make a DOM object
99
DOMWriter domWriter = new DOMWriter();
100         org.w3c.dom.Document JavaDoc domDocument = domWriter.write(document);
101
102         // now lets read it back as a DOM4J object
103
DOMReader domReader = new DOMReader();
104         Document newDocument = domReader.read(domDocument);
105
106         // lets ensure names are same
107
newDocument.setName(document.getName());
108
109         assertDocumentsEqual(document, newDocument);
110
111         return newDocument;
112     }
113
114     protected Document roundTripJAXP(Document document) throws Exception JavaDoc {
115         // output the document to a text buffer via JAXP
116
TransformerFactory JavaDoc factory = TransformerFactory.newInstance();
117         Transformer JavaDoc transformer = factory.newTransformer();
118
119         StringWriter JavaDoc buffer = new StringWriter JavaDoc();
120         StreamResult JavaDoc streamResult = new StreamResult JavaDoc(buffer);
121         DocumentSource documentSource = new DocumentSource(document);
122
123         transformer.transform(documentSource, streamResult);
124
125         // now lets parse it back again via JAXP
126
DocumentResult documentResult = new DocumentResult();
127         StreamSource JavaDoc streamSource = new StreamSource JavaDoc(new StringReader JavaDoc(buffer
128                 .toString()));
129
130         transformer.transform(streamSource, documentResult);
131
132         Document newDocument = documentResult.getDocument();
133
134         // lets ensure names are same
135
newDocument.setName(document.getName());
136
137         assertDocumentsEqual(document, newDocument);
138
139         return newDocument;
140     }
141
142     protected Document roundTripSAX(Document document) throws Exception JavaDoc {
143         // now lets write it back as SAX events to
144
// a SAX ContentHandler which should build up a new document
145
SAXContentHandler contentHandler = new SAXContentHandler();
146         SAXWriter saxWriter = new SAXWriter(contentHandler, contentHandler,
147                 contentHandler);
148
149         saxWriter.write(document);
150
151         Document newDocument = contentHandler.getDocument();
152
153         // lets ensure names are same
154
newDocument.setName(document.getName());
155
156         assertDocumentsEqual(document, newDocument);
157
158         return newDocument;
159     }
160
161     protected Document roundTripText(Document document) throws Exception JavaDoc {
162         StringWriter JavaDoc out = new StringWriter JavaDoc();
163         XMLWriter xmlWriter = new XMLWriter(out);
164
165         xmlWriter.write(document);
166
167         // now lets read it back
168
String JavaDoc xml = out.toString();
169
170         StringReader JavaDoc in = new StringReader JavaDoc(xml);
171         SAXReader reader = new SAXReader();
172         Document newDocument = reader.read(in);
173
174         // lets ensure names are same
175
newDocument.setName(document.getName());
176
177         assertDocumentsEqual(document, newDocument);
178
179         return newDocument;
180     }
181
182     protected Document roundTripFull(Document document) throws Exception JavaDoc {
183         Document doc2 = roundTripDOM(document);
184         Document doc3 = roundTripSAX(doc2);
185         Document doc4 = roundTripText(doc3);
186
187         assertDocumentsEqual(document, doc4);
188
189         return doc4;
190     }
191 }
192
193 /*
194  * Redistribution and use of this software and associated documentation
195  * ("Software"), with or without modification, are permitted provided that the
196  * following conditions are met:
197  *
198  * 1. Redistributions of source code must retain copyright statements and
199  * notices. Redistributions must also contain a copy of this document.
200  *
201  * 2. Redistributions in binary form must reproduce the above copyright notice,
202  * this list of conditions and the following disclaimer in the documentation
203  * and/or other materials provided with the distribution.
204  *
205  * 3. The name "DOM4J" must not be used to endorse or promote products derived
206  * from this Software without prior written permission of MetaStuff, Ltd. For
207  * written permission, please contact dom4j-info@metastuff.com.
208  *
209  * 4. Products derived from this Software may not be called "DOM4J" nor may
210  * "DOM4J" appear in their names without prior written permission of MetaStuff,
211  * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
212  *
213  * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
214  *
215  * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
216  * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
217  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
218  * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
219  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
220  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
221  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
222  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
223  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
224  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
225  * POSSIBILITY OF SUCH DAMAGE.
226  *
227  * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
228  */

229
Popular Tags