1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.wss4j.stax.test.utils;
20
21
22
23 import javax.xml.stream.XMLStreamException;
24 import javax.xml.stream.XMLStreamReader;
25 import javax.xml.stream.XMLStreamWriter;
26 import javax.xml.stream.events.XMLEvent;
27
28 public final class XmlReaderToWriter {
29 private XmlReaderToWriter() {
30 }
31
32 public static void writeAll(XMLStreamReader xmlr, XMLStreamWriter writer)
33 throws XMLStreamException {
34 while (xmlr.hasNext()) {
35 xmlr.next();
36 write(xmlr, writer);
37 }
38
39 writer.flush();
40 }
41
42 public static void write(XMLStreamReader xmlr, XMLStreamWriter writer) throws XMLStreamException {
43 switch (xmlr.getEventType()) {
44 case XMLEvent.START_ELEMENT:
45 final String localName = xmlr.getLocalName();
46 final String namespaceURI = xmlr.getNamespaceURI();
47 if (namespaceURI != null && namespaceURI.length() > 0) {
48 final String prefix = xmlr.getPrefix();
49 if (prefix != null) {
50 writer.writeStartElement(prefix, localName, namespaceURI);
51 } else {
52 writer.writeStartElement(namespaceURI, localName);
53 }
54 } else {
55 writer.writeStartElement(localName);
56 }
57
58 for (int i = 0, len = xmlr.getNamespaceCount(); i < len; i++) {
59 String prefix = xmlr.getNamespacePrefix(i);
60 if (prefix == null) {
61 writer.writeDefaultNamespace(xmlr.getNamespaceURI(i));
62 } else {
63 writer.writeNamespace(prefix, xmlr.getNamespaceURI(i));
64 }
65 }
66
67 for (int i = 0, len = xmlr.getAttributeCount(); i < len; i++) {
68 final String attUri = xmlr.getAttributeNamespace(i);
69
70 if (attUri != null && attUri.length() > 0) {
71 final String prefix = xmlr.getAttributePrefix(i);
72 if (prefix != null) {
73 writer.writeAttribute(prefix, attUri, xmlr.getAttributeLocalName(i), xmlr.getAttributeValue(i));
74 } else {
75 writer.writeAttribute(attUri, xmlr.getAttributeLocalName(i), xmlr.getAttributeValue(i));
76 }
77 } else {
78 writer.writeAttribute(xmlr.getAttributeLocalName(i), xmlr.getAttributeValue(i));
79 }
80
81 }
82 break;
83 case XMLEvent.END_ELEMENT:
84 writer.writeEndElement();
85 break;
86 case XMLEvent.SPACE:
87 case XMLEvent.CHARACTERS:
88 writer.writeCharacters(xmlr.getText());
89 break;
90 case XMLEvent.PROCESSING_INSTRUCTION:
91 writer.writeProcessingInstruction(xmlr.getPITarget(), xmlr.getPIData());
92 break;
93 case XMLEvent.CDATA:
94 writer.writeCData(xmlr.getText());
95 break;
96 case XMLEvent.COMMENT:
97 writer.writeComment(xmlr.getText());
98 break;
99 case XMLEvent.ENTITY_REFERENCE:
100 writer.writeEntityRef(xmlr.getLocalName());
101 break;
102 case XMLEvent.START_DOCUMENT:
103 String encoding = xmlr.getCharacterEncodingScheme();
104 String version = xmlr.getVersion();
105
106 if (encoding != null && version != null) {
107 writer.writeStartDocument(encoding, version);
108 } else if (version != null) {
109 writer.writeStartDocument(xmlr.getVersion());
110 }
111 break;
112 case XMLEvent.END_DOCUMENT:
113 writer.writeEndDocument();
114 break;
115 case XMLEvent.DTD:
116 writer.writeDTD(xmlr.getText());
117 break;
118 }
119 }
120 }