View Javadoc
1   /**
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements. See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership. The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License. You may obtain a copy of the License at
9    *
10   * http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied. See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  package org.apache.wss4j.stax.test.utils;
20  
21  // Revised from xmlbeans
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          //write(xmlr, writer); // write the last element
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 }