1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.bea.xml.stream;
17
18 import javax.xml.stream.XMLStreamWriter;
19 import javax.xml.stream.XMLStreamReader;
20 import javax.xml.stream.XMLStreamException;
21 import javax.xml.stream.events.XMLEvent;
22 import javax.xml.stream.XMLInputFactory;
23 import javax.xml.stream.XMLOutputFactory;
24
25 /***
26 * <p> Automatically write a reader.</p>
27 */
28
29 public class ReaderToWriter {
30
31 private XMLStreamWriter writer;
32
33 public ReaderToWriter(){}
34 public ReaderToWriter(XMLStreamWriter xmlw) {
35 writer = xmlw;
36 }
37
38 public void setStreamWriter(XMLStreamWriter xmlw) {
39 writer = xmlw;
40 }
41 public void write(XMLStreamReader xmlr)
42 throws XMLStreamException
43 {
44 System.out.println("wrote event");
45 switch (xmlr.getEventType()) {
46 case XMLEvent.START_ELEMENT:
47 String prefix = xmlr.getPrefix();
48 String namespaceURI = xmlr.getNamespaceURI();
49 if (namespaceURI != null) {
50 if(prefix != null)
51 writer.writeStartElement(xmlr.getPrefix(),
52 xmlr.getLocalName(),
53 xmlr.getNamespaceURI());
54 else
55 writer.writeStartElement(xmlr.getNamespaceURI(),
56 xmlr.getLocalName());
57 } else {
58 writer.writeStartElement(xmlr.getLocalName());
59 }
60
61 for (int i =0; i < xmlr.getNamespaceCount(); i++) {
62 writer.writeNamespace(xmlr.getNamespacePrefix(i),
63 xmlr.getNamespaceURI(i));
64 }
65 break;
66 case XMLEvent.END_ELEMENT:
67 writer.writeEndElement();
68 break;
69 case XMLEvent.SPACE:
70 case XMLEvent.CHARACTERS:
71 writer.writeCharacters(xmlr.getTextCharacters(),
72 xmlr.getTextStart(),
73 xmlr.getTextLength());
74 break;
75 case XMLEvent.PROCESSING_INSTRUCTION:
76 writer.writeProcessingInstruction(xmlr.getPITarget(),
77 xmlr.getPIData());
78 break;
79 case XMLEvent.CDATA:
80 writer.writeCData(xmlr.getText());
81 break;
82
83 case XMLEvent.COMMENT:
84 writer.writeComment(xmlr.getText());
85 break;
86 case XMLEvent.ENTITY_REFERENCE:
87 writer.writeEntityRef(xmlr.getLocalName());
88 break;
89 case XMLEvent.START_DOCUMENT:
90 String encoding = xmlr.getCharacterEncodingScheme();
91 String version = xmlr.getVersion();
92
93 if (encoding != null && version != null)
94 writer.writeStartDocument(encoding,
95 version);
96 else if (version != null)
97 writer.writeStartDocument(xmlr.getVersion());
98 break;
99 case XMLEvent.END_DOCUMENT:
100 writer.writeEndDocument();
101 break;
102 case XMLEvent.DTD:
103 writer.writeDTD(xmlr.getText());
104 break;
105
106 }
107 }
108
109 public XMLStreamWriter writeAll(XMLStreamReader xmlr)
110 throws XMLStreamException
111 {
112 while (xmlr.hasNext()) {
113 write(xmlr);
114 xmlr.next();
115 }
116 writer.flush();
117 return writer;
118 }
119
120 public static void main(String args[]) throws Exception {
121 XMLInputFactory xmlif = XMLInputFactory.newInstance();
122 XMLOutputFactory xmlof = XMLOutputFactory.newInstance();
123 XMLStreamReader xmlr = xmlif.createXMLStreamReader(new java.io.FileReader(args[0]));
124 XMLStreamWriter xmlw = xmlof.createXMLStreamWriter(System.out);
125
126 ReaderToWriter rtow = new ReaderToWriter(xmlw);
127 while (xmlr.hasNext()) {
128 rtow.write(xmlr);
129 xmlr.next();
130 }
131 xmlw.flush();
132 }
133 }