View Javadoc

1   /*   Copyright 2004 BEA Systems, Inc.
2    *
3    *   Licensed under the Apache License, Version 2.0 (the "License");
4    *   you may not use this file except in compliance with the License.
5    *   You may obtain a copy of the License at
6    *
7    *       http://www.apache.org/licenses/LICENSE-2.0
8    *
9    *   Unless required by applicable law or agreed to in writing, software
10   *   distributed under the License is distributed on an "AS IS" BASIS,
11   *   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   *   See the License for the specific language governing permissions and
13   *   limitations under the License.
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 }