< prev index next >

src/java.xml/share/classes/com/sun/org/apache/xalan/internal/xsltc/trax/SAX2StAXStreamWriter.java

Print this page

        

@@ -1,7 +1,7 @@
 /*
- * Copyright (c) 2005, 2006, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2005, 2020, Oracle and/or its affiliates. All rights reserved.
  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  *
  * This code is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License version 2 only, as
  * published by the Free Software Foundation.  Oracle designates this

@@ -23,101 +23,65 @@
  * questions.
  */
 
 package com.sun.org.apache.xalan.internal.xsltc.trax;
 
-import java.util.Iterator;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
-import javax.xml.stream.XMLEventWriter;
-
 import org.xml.sax.Attributes;
 import org.xml.sax.SAXException;
 import org.xml.sax.ext.Locator2;
 
 /**
  * @author Sunitha Reddy
  */
-
 public class SAX2StAXStreamWriter extends SAX2StAXBaseWriter {
 
-
         private XMLStreamWriter writer;
 
         private boolean needToCallStartDocument = false;
 
         public SAX2StAXStreamWriter() {
 
         }
 
         public SAX2StAXStreamWriter(XMLStreamWriter writer) {
-
                 this.writer = writer;
-
         }
 
-
         public XMLStreamWriter getStreamWriter() {
-
                 return writer;
-
         }
 
-
         public void setStreamWriter(XMLStreamWriter writer) {
-
                 this.writer = writer;
-
         }
 
         public void startDocument() throws SAXException {
-
                 super.startDocument();
                 // Encoding and version info will be available only after startElement
                 // is called for first time. So, defer START_DOCUMENT event of StAX till
                 // that point of time.
                 needToCallStartDocument = true;
         }
 
         public void endDocument() throws SAXException {
-
                 try {
-
                         writer.writeEndDocument();
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
 
                 super.endDocument();
-
         }
 
         public void startElement(String uri, String localName, String qName,
                         Attributes attributes) throws SAXException {
 
                 if (needToCallStartDocument) {
-                    try {
-                        if (docLocator == null)
-                            writer.writeStartDocument();
-                        else {
-                            try{
-                                writer.writeStartDocument(((Locator2)docLocator).getXMLVersion());
-                            }catch(ClassCastException e){
-                                writer.writeStartDocument();
-                            }
-                        }
-
-                    } catch (XMLStreamException e) {
-
-                            throw new SAXException(e);
-
-                    }
-                    needToCallStartDocument = false;
+            writeStartDocument();
                 }
 
                 try {
 
                         String[] qname = {null, null};

@@ -125,30 +89,11 @@
                         //Do not call writeStartElement with prefix and namespaceURI, as it writes out
                         //namespace declaration.
                         //writer.writeStartElement(qname[0], qname[1], uri);
                         writer.writeStartElement(qName);
 
-
-                        // No need to write namespaces, as they are written as part of attributes.
-                        /*if (namespaces != null) {
-
-                            final int nDecls = namespaces.size();
-                            for (int i = 0; i < nDecls; i++) {
-                                final String prefix = (String) namespaces.elementAt(i);
-                                if (prefix.length() == 0) {
-                                    writer.setDefaultNamespace((String)namespaces.elementAt(++i));
-                                } else {
-                                    writer.setPrefix(prefix, (String) namespaces.elementAt(++i));
-                                }
-
-                                writer.writeNamespace(prefix, (String)namespaces.elementAt(i));
-                            }
-
-
-                        }*/
-
-                        // write attributes
+            // write attributes and namespaces as attributes
                         for (int i = 0, s = attributes.getLength(); i < s; i++) {
 
                                 parseQName(attributes.getQName(i), qname);
 
                                 String attrPrefix = qname[0];

@@ -157,146 +102,107 @@
                                 String attrQName = attributes.getQName(i);
                                 String attrValue = attributes.getValue(i);
                                 String attrURI = attributes.getURI(i);
 
                                 if ("xmlns".equals(attrPrefix) || "xmlns".equals(attrQName)) {
-
                                         // namespace declaration disguised as an attribute.
                                         // write it as an namespace
-
                                         if (attrLocal.length() == 0) {
-
                                             writer.setDefaultNamespace(attrValue);
-
                                         } else {
-
                                             writer.setPrefix(attrLocal, attrValue);
-
                                         }
 
                                         writer.writeNamespace(attrLocal, attrValue);
 
                                 } else if (attrPrefix.length() > 0) {
-
                                         writer.writeAttribute(attrPrefix, attrURI, attrLocal,
                                                         attrValue);
-
                                 } else {
                                         writer.writeAttribute(attrQName, attrValue);
                                 }
-
                         }
 
                 } catch (XMLStreamException e) {
                         throw new SAXException(e);
-
                 } finally {
-
                         super.startElement(uri, localName, qName, attributes);
-
                 }
-
         }
 
         public void endElement(String uri, String localName, String qName)
                         throws SAXException {
-
                 try {
-
                         writer.writeEndElement();
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 } finally {
-
                         super.endElement(uri, localName, qName);
-
                 }
-
         }
 
         public void comment(char[] ch, int start, int length) throws SAXException {
-
+        if (needToCallStartDocument) {
+            writeStartDocument();
+        }
                 super.comment(ch, start, length);
                 try {
-
                         writer.writeComment(new String(ch, start, length));
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
-
         }
 
         public void characters(char[] ch, int start, int length)
                         throws SAXException {
-
                 super.characters(ch, start, length);
                 try {
-
                         if (!isCDATA) {
-
                                 writer.writeCharacters(ch, start, length);
-
                         }
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
-
         }
 
         public void endCDATA() throws SAXException {
-
                 try {
-
                         writer.writeCData(CDATABuffer.toString());
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
 
                 super.endCDATA();
-
         }
 
         public void ignorableWhitespace(char[] ch, int start, int length)
                         throws SAXException {
 
                 super.ignorableWhitespace(ch, start, length);
                 try {
-
                         writer.writeCharacters(ch, start, length);
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
-
         }
 
         public void processingInstruction(String target, String data)
                         throws SAXException {
 
                 super.processingInstruction(target, data);
                 try {
-
                         writer.writeProcessingInstruction(target, data);
-
                 } catch (XMLStreamException e) {
-
                         throw new SAXException(e);
-
                 }
-
         }
 
+    void writeStartDocument() throws SAXException {
+        super.writeStartDocument();
+        try {
+            writer.writeStartDocument(xmlVersion);
+        } catch (XMLStreamException e) {
+            throw new SAXException(e);
+        }
+        needToCallStartDocument = false;
+    }
 }
< prev index next >