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>&#xnn</CODE>.