You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2016/05/07 16:26:27 UTC

svn commit: r1742726 - in /webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer: SerializerXmlHandler.java ToStream.java

Author: veithen
Date: Sat May  7 16:26:26 2016
New Revision: 1742726

URL: http://svn.apache.org/viewvc?rev=1742726&view=rev
Log:
Write attributes directly instead of accumulating them.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/SerializerXmlHandler.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/ToStream.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/SerializerXmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/SerializerXmlHandler.java?rev=1742726&r1=1742725&r2=1742726&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/SerializerXmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/SerializerXmlHandler.java Sat May  7 16:26:26 2016
@@ -25,21 +25,15 @@ import org.apache.axiom.core.CharacterDa
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.core.stream.util.CharacterDataAccumulator;
-import org.xml.sax.helpers.AttributesImpl;
 
 public class SerializerXmlHandler implements XmlHandler {
     private enum CharacterDataMode { PASS_THROUGH, BUFFER, SKIP, ACCUMULATE };
     
     private final ToXMLStream serializer;
-    private String[] prefixStack = new String[16];
-    private int bindings;
-    private int[] scopeStack = new int[8];
-    private int depth;
     private Stack<String> elementNameStack = new Stack<String>();
     private String elementURI;
     private String elementLocalName;
     private String elementQName;
-    private final AttributesImpl attributes = new AttributesImpl();
     private CharacterDataMode characterDataMode = CharacterDataMode.PASS_THROUGH;
     private char[] buffer = new char[4096];
     private int bufferPos;
@@ -78,38 +72,28 @@ public class SerializerXmlHandler implem
         elementURI = namespaceURI;
         elementLocalName = localName;
         elementQName = getQName(prefix, localName);
-        if (depth == scopeStack.length) {
-            int[] newScopeStack = new int[scopeStack.length*2];
-            System.arraycopy(scopeStack, 0, newScopeStack, 0, scopeStack.length);
-            scopeStack = newScopeStack;
-        }
-        scopeStack[depth++] = bindings;
+        serializer.startElement(elementURI, elementLocalName, elementQName, null);
     }
 
     public void processNamespaceDeclaration(String prefix, String namespaceURI) throws StreamException {
-        if (bindings == prefixStack.length) {
-            String[] newPrefixStack = new String[prefixStack.length*2];
-            System.arraycopy(prefixStack, 0, newPrefixStack, 0, prefixStack.length);
-            prefixStack = newPrefixStack;
+        if (prefix.isEmpty()) {
+            serializer.writeAttribute("", "xmlns", namespaceURI);
+        } else {
+            serializer.writeAttribute("xmlns", prefix, namespaceURI);
         }
-        prefixStack[bindings++] = prefix;
-        serializer.startPrefixMapping(prefix, namespaceURI);
-        // TODO: depending on the http://xml.org/sax/features/xmlns-uris feature, we also need to add an attribute
     }
 
     public void processAttribute(String namespaceURI, String localName, String prefix, String value, String type, boolean specified) throws StreamException {
-        attributes.addAttribute(namespaceURI, localName, getQName(prefix, localName), type, value);
+        serializer.writeAttribute(prefix, localName, value);
     }
 
     public void attributesCompleted() throws StreamException {
-        serializer.startElement(elementURI, elementLocalName, elementQName, attributes);
         elementNameStack.push(elementURI);
         elementNameStack.push(elementLocalName);
         elementNameStack.push(elementQName);
         elementURI = null;
         elementLocalName = null;
         elementQName = null;
-        attributes.clear();
         serializer.closeStartTag();
     }
 
@@ -118,10 +102,6 @@ public class SerializerXmlHandler implem
         String elementLocalName = elementNameStack.pop();
         String elementURI = elementNameStack.pop();
         serializer.endElement(elementURI, elementLocalName, elementQName);
-        for (int i=bindings-1; i>=scopeStack[depth-1]; i--) {
-            serializer.endPrefixMapping(prefixStack[i]);
-        }
-        bindings = scopeStack[--depth];
     }
 
     private void writeToBuffer(String data) {

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/ToStream.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/ToStream.java?rev=1742726&r1=1742725&r2=1742726&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/ToStream.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/serializer/ToStream.java Sat May  7 16:26:26 2016
@@ -1972,6 +1972,23 @@ abstract public class ToStream extends S
             }
     }
 
+    public void writeAttribute(String prefix, String localName, String value) throws StreamException {
+        try {
+            final Writer writer = m_writer;
+            writer.write(' ');
+            if (!prefix.isEmpty()) {
+                writer.write(prefix);
+                writer.write(':');
+            }
+            writer.write(localName);
+            writer.write("=\"");
+            writeAttrString(writer, value);
+            writer.write('\"');
+        } catch (IOException ex) {
+            throw new StreamException(ex);
+        }
+    }
+
     /**
      * Returns the specified <var>string</var> after substituting <VAR>specials</VAR>,
      * and UTF-16 surrogates for chracter references <CODE>&amp;#xnn</CODE>.