1 /*
2  * Copyright 2002-2010 the original author or authors.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package org.springframework.util.xml;
18 
19 import java.io.StringReader;
20 import java.io.StringWriter;
21 import javax.xml.parsers.DocumentBuilder;
22 import javax.xml.parsers.DocumentBuilderFactory;
23 import javax.xml.stream.XMLEventReader;
24 import javax.xml.stream.XMLInputFactory;
25 import javax.xml.stream.XMLStreamReader;
26 import javax.xml.transform.Transformer;
27 import javax.xml.transform.TransformerFactory;
28 import javax.xml.transform.dom.DOMResult;
29 import javax.xml.transform.stream.StreamResult;
30 
31 import static org.custommonkey.xmlunit.XMLAssert.*;
32 import org.junit.Before;
33 import org.junit.Test;
34 import org.w3c.dom.Document;
35 import org.xml.sax.InputSource;
36 
37 public class StaxSourceTests {
38 
39 	private static final String XML = "<root xmlns='namespace'><child/></root>";
40 
41 	private Transformer transformer;
42 
43 	private XMLInputFactory inputFactory;
44 
45 	private DocumentBuilder documentBuilder;
46 
47 	@Before
setUp()48 	public void setUp() throws Exception {
49 		TransformerFactory transformerFactory = TransformerFactory.newInstance();
50 		transformer = transformerFactory.newTransformer();
51 		inputFactory = XMLInputFactory.newInstance();
52 		DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
53 		documentBuilderFactory.setNamespaceAware(true);
54 		documentBuilder = documentBuilderFactory.newDocumentBuilder();
55 	}
56 
57 	@Test
streamReaderSourceToStreamResult()58 	public void streamReaderSourceToStreamResult() throws Exception {
59 		XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new StringReader(XML));
60 		StaxSource source = new StaxSource(streamReader);
61 		assertEquals("Invalid streamReader returned", streamReader, source.getXMLStreamReader());
62 		assertNull("EventReader returned", source.getXMLEventReader());
63 		StringWriter writer = new StringWriter();
64 		transformer.transform(source, new StreamResult(writer));
65 		assertXMLEqual("Invalid result", XML, writer.toString());
66 	}
67 
68 	@Test
streamReaderSourceToDOMResult()69 	public void streamReaderSourceToDOMResult() throws Exception {
70 		XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new StringReader(XML));
71 		StaxSource source = new StaxSource(streamReader);
72 		assertEquals("Invalid streamReader returned", streamReader, source.getXMLStreamReader());
73 		assertNull("EventReader returned", source.getXMLEventReader());
74 
75 		Document expected = documentBuilder.parse(new InputSource(new StringReader(XML)));
76 		Document result = documentBuilder.newDocument();
77 		transformer.transform(source, new DOMResult(result));
78 		assertXMLEqual("Invalid result", expected, result);
79 	}
80 
81 	@Test
eventReaderSourceToStreamResult()82 	public void eventReaderSourceToStreamResult() throws Exception {
83 		XMLEventReader eventReader = inputFactory.createXMLEventReader(new StringReader(XML));
84 		StaxSource source = new StaxSource(eventReader);
85 		assertEquals("Invalid eventReader returned", eventReader, source.getXMLEventReader());
86 		assertNull("StreamReader returned", source.getXMLStreamReader());
87 		StringWriter writer = new StringWriter();
88 		transformer.transform(source, new StreamResult(writer));
89 		assertXMLEqual("Invalid result", XML, writer.toString());
90 	}
91 
92 	@Test
eventReaderSourceToDOMResult()93 	public void eventReaderSourceToDOMResult() throws Exception {
94 		XMLEventReader eventReader = inputFactory.createXMLEventReader(new StringReader(XML));
95 		StaxSource source = new StaxSource(eventReader);
96 		assertEquals("Invalid eventReader returned", eventReader, source.getXMLEventReader());
97 		assertNull("StreamReader returned", source.getXMLStreamReader());
98 
99 		Document expected = documentBuilder.parse(new InputSource(new StringReader(XML)));
100 		Document result = documentBuilder.newDocument();
101 		transformer.transform(source, new DOMResult(result));
102 		assertXMLEqual("Invalid result", expected, result);
103 	}
104 }