1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package com.bea.xml.stream;
17
18 import com.bea.xml.stream.util.ElementTypeNames;
19
20 import java.util.Iterator;
21 import javax.xml.namespace.NamespaceContext;
22
23 import javax.xml.stream.XMLStreamWriter;
24 import javax.xml.stream.XMLEventWriter;
25 import javax.xml.stream.util.XMLEventConsumer;
26 import javax.xml.stream.XMLEventReader;
27 import javax.xml.stream.XMLStreamException;
28 import javax.xml.stream.events.XMLEvent;
29 import javax.xml.stream.events.StartElement;
30 import javax.xml.stream.events.ProcessingInstruction;
31 import javax.xml.stream.events.Comment;
32 import javax.xml.stream.events.EndElement;
33 import javax.xml.stream.events.Namespace;
34 import javax.xml.stream.events.Characters;
35 import javax.xml.stream.events.StartDocument;
36 import javax.xml.stream.events.EndDocument;
37 import javax.xml.stream.events.Namespace;
38 import javax.xml.stream.events.Attribute;
39 import javax.xml.stream.events.EntityReference;
40 import javax.xml.stream.events.DTD;
41
42 /***
43 * <p> The base writer class </p>
44 */
45
46 public class XMLEventWriterBase
47 implements XMLEventWriter, XMLEventConsumer
48 {
49 XMLStreamWriter writer;
50
51 public XMLEventWriterBase(XMLStreamWriter writer) {
52 this.writer = writer;
53 }
54
55 public void flush()
56 throws XMLStreamException
57 {
58 writer.flush();
59 }
60
61 public void close()
62 throws XMLStreamException
63 {
64 writer.close();
65 }
66
67 private void addStartElement(StartElement se)
68 throws XMLStreamException
69 {
70 String prefix = se.getName().getPrefix();
71 String namespace = se.getName().getNamespaceURI();
72 String localName = se.getName().getLocalPart();
73 writer.writeStartElement(prefix,localName,namespace);
74 Iterator ni = se.getNamespaces();
75 while (ni.hasNext()) {
76 writeNamespace((Namespace)ni.next());
77 }
78
79 Iterator ai = se.getAttributes();
80 while (ai.hasNext()) {
81 writeAttribute((Attribute) ai.next());
82 }
83
84 }
85
86 private void addEndElement(EndElement ee)
87 throws XMLStreamException
88 {
89 String prefix = ee.getName().getPrefix();
90 String namespace = ee.getName().getNamespaceURI();
91 String localName = ee.getName().getLocalPart();
92 writer.writeEndElement();
93 }
94
95 public void addCharacters(Characters cd)
96 throws XMLStreamException
97 {
98 if (cd.isCData())
99 writer.writeCData(cd.getData());
100 else
101 writer.writeCharacters(cd.getData());
102 }
103
104 public void addEntityReference(EntityReference er)
105 throws XMLStreamException
106 {
107 writer.writeEntityRef(er.getName());
108 }
109
110 public void addProcessingInstruction(ProcessingInstruction pi)
111 throws XMLStreamException
112 {
113 writer.writeProcessingInstruction(pi.getTarget(),
114 pi.getData());
115 }
116
117 public void addComment(Comment c)
118 throws XMLStreamException
119 {
120 writer.writeComment(c.getText());
121 }
122
123 public void addStartDocument(StartDocument sd)
124 throws XMLStreamException
125 {
126 String encoding = sd.getCharacterEncodingScheme();
127 String version = sd.getVersion();
128 boolean standalone = sd.isStandalone();
129 writer.writeStartDocument(encoding,version);
130 }
131
132 public void addEndDocument(EndDocument ed)
133 throws XMLStreamException
134 {
135
136 }
137
138 private void writeAttribute(Attribute a)
139 throws XMLStreamException
140 {
141 writer.writeAttribute(a.getName().getNamespaceURI(),
142 a.getName().getLocalPart(),
143 a.getValue());
144 }
145 public void addAttribute(Attribute a)
146 throws XMLStreamException
147 {
148 writeAttribute(a);
149 }
150
151 public void writeNamespace(Namespace n)
152 throws XMLStreamException
153 {
154 if (n.isDefaultNamespaceDeclaration())
155 writer.writeDefaultNamespace(n.getNamespaceURI());
156 else
157 writer.writeNamespace(n.getPrefix(),
158 n.getNamespaceURI());
159 }
160 public void addNamespace(Namespace ns)
161 throws XMLStreamException
162 {
163 writeNamespace(ns);
164 }
165
166 public void addDTD(DTD dtd)
167 throws XMLStreamException
168 {
169 writer.writeDTD(dtd.getDocumentTypeDeclaration());
170 }
171
172 public void add(XMLEvent e)
173 throws XMLStreamException
174 {
175 switch(e.getEventType()) {
176 case XMLEvent.START_ELEMENT:
177 addStartElement((StartElement) e);
178 break;
179 case XMLEvent.END_ELEMENT:
180 addEndElement((EndElement) e) ;
181 break;
182 case XMLEvent.CHARACTERS:
183 addCharacters((Characters) e);
184 break;
185 case XMLEvent.ENTITY_REFERENCE:
186 addEntityReference((EntityReference) e);
187 break;
188 case XMLEvent.PROCESSING_INSTRUCTION:
189 addProcessingInstruction((ProcessingInstruction) e);
190 break;
191 case XMLEvent.COMMENT:
192 addComment((Comment) e);
193 break;
194 case XMLEvent.START_DOCUMENT:
195 addStartDocument((StartDocument) e);
196 break;
197 case XMLEvent.END_DOCUMENT:
198 addEndDocument((EndDocument) e);
199 break;
200 case XMLEvent.ATTRIBUTE:
201 addAttribute((Attribute) e);
202 break;
203 case XMLEvent.NAMESPACE:
204 addNamespace((Namespace) e);
205 break;
206 case XMLEvent.DTD:
207 addDTD((DTD) e);
208 break;
209 default:
210 throw new XMLStreamException("Unable to add event["+
211 ElementTypeNames.getEventTypeString(e.getEventType())+"]");
212 }
213 }
214
215 public void add(XMLEventReader stream)
216 throws XMLStreamException
217 {
218 while(stream.hasNext())
219 add(stream.nextEvent());
220 }
221
222 public String getPrefix(String uri)
223 throws XMLStreamException
224 {
225 return writer.getPrefix(uri);
226 }
227
228 public void setPrefix(String prefix, String uri)
229 throws XMLStreamException
230 {
231 writer.setPrefix(prefix,uri);
232 }
233
234 public void setDefaultNamespace(String uri)
235 throws XMLStreamException
236 {
237 writer.setDefaultNamespace(uri);
238 }
239
240 public void setNamespaceContext(NamespaceContext context)
241 throws XMLStreamException
242 {
243 writer.setNamespaceContext(context);
244 }
245
246 public NamespaceContext getNamespaceContext() {
247 return writer.getNamespaceContext();
248 }
249 public static void main(String args[])
250 throws Exception
251 {
252 System.setProperty("javax.xml.stream.XMLInputFactory",
253 "com.bea.xml.stream.MXParserFactory");
254 System.setProperty("javax.xml.stream.XMLEventFactory",
255 "com.bea.xml.stream.EventFactory");
256
257 java.io.Writer w = new java.io.OutputStreamWriter(System.out);
258 XMLEventWriterBase writer =
259 new XMLEventWriterBase(new XMLWriterBase(w));
260
261 MXParser parser = new MXParser();
262 parser.setConfigurationContext(new ConfigurationContextBase());
263 parser.setInput(new java.io.FileReader(args[0]));
264
265 XMLEventReaderBase reader = new XMLEventReaderBase(parser);
266
267 while(reader.hasNext()) {
268 XMLEvent e= reader.nextEvent();
269 System.out.println("about to add:["+e+"];");
270 writer.add(e);
271 }
272 writer.flush();
273 }
274 }