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 2013/01/29 22:58:28 UTC
svn commit: r1440169 - in /webservices/axiom/trunk/modules:
axiom-api/src/main/java/org/apache/axiom/om/impl/builder/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/seria...
Author: veithen
Date: Tue Jan 29 21:58:27 2013
New Revision: 1440169
URL: http://svn.apache.org/viewvc?rev=1440169&view=rev
Log:
Partial implementation of AXIOM-288: it is now possible to continue building the rest of the tree after an element has been consumed using serializeAndConsume.
Added:
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java (with props)
Modified:
webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMDocumentHelper.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/SAXSerializer.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/Serializer.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/StAXSerializer.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/CommentImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentTypeImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/EntityReferenceImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ProcessingInstructionImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextNodeImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMEntityReferenceImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPFaultImpl.java
webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java
webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMCachingTest.java
webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java
webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestSerializeAndConsumeConsumed.java
Modified: webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java Tue Jan 29 21:58:27 2013
@@ -100,8 +100,9 @@ public abstract class StAXBuilder implem
protected DataHandlerReader dataHandlerReader;
/**
- * Element level is the depth of the element.
- * The root element (i.e. envelope) is defined as 1.
+ * Tracks the depth of the node identified by {@link #target}. By definition, the level of the
+ * root element is defined as 1. Note that if caching is disabled, then this depth may be
+ * different from the actual depth reached by the underlying parser.
*/
protected int elementLevel = 0;
@@ -312,47 +313,37 @@ public abstract class StAXBuilder implem
// throw new OMException();
// }
try {
-
- if (container instanceof OMDocument) {
- if (container != document) {
- throw new OMException("Called discard for a document that is not being built by this builder");
- }
- while (parserNext() != XMLStreamConstants.END_DOCUMENT) {
- // Just loop
- }
- } else {
- // Calculate the depth of the element to be discarded. This determines how many
- // END_ELEMENT events we need to consume.
- int targetDepth = elementLevel-1;
- OMContainerEx current = target;
- while (current != container) {
- if (current instanceof OMElement) {
- targetDepth--;
- current = (OMContainerEx)((OMElement)current).getParent();
- } else {
- throw new OMException("Called discard for an element that is not being built by this builder");
- }
- }
- while (elementLevel > targetDepth) {
- parserNext();
- }
- }
-
- // Mark nodes as discarded
- OMContainerEx current = target;
- while (true) {
- discarded(current);
- if (current == container) {
- break;
+ int skipDepth = 0;
+ loop: while (true) {
+ switch (parserNext()) {
+ case XMLStreamReader.START_ELEMENT:
+ skipDepth++;
+ break;
+ case XMLStreamReader.END_ELEMENT:
+ if (skipDepth > 0) {
+ skipDepth--;
+ } else {
+ discarded(target);
+ boolean found = container == target;
+ target = (OMContainerEx)((OMElement)target).getParent();
+ elementLevel--;
+ if (found) {
+ break loop;
+ }
+ }
+ break;
+ case XMLStreamReader.END_DOCUMENT:
+ if (skipDepth != 0 || elementLevel != 0) {
+ throw new OMException("Unexpected END_DOCUMENT");
+ }
+ if (target != document) {
+ throw new OMException("Called discard for an element that is not being built by this builder");
+ }
+ discarded(target);
+ target = null;
+ done = true;
+ break loop;
}
- current = (OMContainerEx)((OMElement)current).getParent();
- }
-
- if (container instanceof OMDocument) {
- target = null;
- done = true;
- } else {
- target = (OMContainerEx)((OMElement)container).getParent();
}
} catch (XMLStreamException e) {
throw new OMException(e);
@@ -551,6 +542,52 @@ public abstract class StAXBuilder implem
}
/**
+ * For internal use only.
+ */
+ public XMLStreamReader disableCaching() {
+ cache = false;
+ return parser;
+ }
+
+ /**
+ * For internal use only.
+ */
+ // This method expects that the parser is currently positioned on the
+ // end event corresponding to the container passed as parameter
+ public void reenableCaching(OMContainer container) throws XMLStreamException {
+ OMContainerEx current = target;
+ while (true) {
+ discarded(current);
+ if (elementLevel == 0) {
+ if (current != container || current != document) {
+ throw new IllegalStateException();
+ }
+ break;
+ }
+ elementLevel--;
+ if (current == container) {
+ break;
+ }
+ current = (OMContainerEx)((OMElement)current).getParent();
+ }
+ // Note that at this point current == container
+ if (container == document) {
+ target = null;
+ done = true;
+ } else if (elementLevel == 0 && document == null) {
+ // Consume the remaining event; for the rationale, see StAXOMBuilder#next()
+ while (parserNext() != XMLStreamConstants.END_DOCUMENT) {
+ // Just loop
+ }
+ target = null;
+ done = true;
+ } else {
+ target = (OMContainerEx)((OMElement)container).getParent();
+ }
+ cache = true;
+ }
+
+ /**
* Method isCompleted.
*
* @return Returns boolean.
Modified: webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java Tue Jan 29 21:58:27 2013
@@ -227,6 +227,7 @@ public class StAXOMBuilder extends StAXB
switch (token) {
case XMLStreamConstants.START_ELEMENT: {
+ elementLevel++;
OMNode node = createNextOMElement();
// If the node was created by a custom builder, then it will be complete;
// in this case, the target doesn't change
@@ -242,6 +243,7 @@ public class StAXOMBuilder extends StAXB
createOMText(XMLStreamConstants.CDATA);
break;
case XMLStreamConstants.END_ELEMENT:
+ elementLevel--;
endElement();
break;
case XMLStreamConstants.END_DOCUMENT:
@@ -697,21 +699,13 @@ public class StAXOMBuilder extends StAXB
parserException = ex;
throw ex;
}
- switch (event) {
- case XMLStreamConstants.START_ELEMENT:
- elementLevel++;
- break;
- case XMLStreamConstants.END_ELEMENT:
- elementLevel--;
- break;
- case XMLStreamConstants.END_DOCUMENT:
- if (elementLevel != 0) {
- throw new OMException("Unexpected END_DOCUMENT event");
- }
- if (autoClose) {
- close();
- }
- break;
+ if (event == XMLStreamConstants.END_DOCUMENT) {
+ if (cache && elementLevel != 0) {
+ throw new OMException("Unexpected END_DOCUMENT event");
+ }
+ if (autoClose) {
+ close();
+ }
}
return event;
}
Added: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java?rev=1440169&view=auto
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java (added)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java Tue Jan 29 21:58:27 2013
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.om.impl.common;
+
+import org.apache.axiom.om.OMDocument;
+
+public interface IDocument extends OMDocument, IContainer {
+
+}
Propchange: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/IDocument.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMDocumentHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMDocumentHelper.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMDocumentHelper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMDocumentHelper.java Tue Jan 29 21:58:27 2013
@@ -20,13 +20,11 @@
package org.apache.axiom.om.impl.common;
import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
-import org.apache.axiom.om.impl.serialize.StreamingOMSerializer;
/**
* Utility class with default implementations for some of the methods defined by the
@@ -35,7 +33,7 @@ import org.apache.axiom.om.impl.serializ
public class OMDocumentHelper {
private OMDocumentHelper() {}
- public static void internalSerialize(OMDocument document, StAXSerializer serializer,
+ public static void internalSerialize(IDocument document, StAXSerializer serializer,
boolean cache, boolean includeXMLDeclaration) throws XMLStreamException, OutputException {
MTOMXMLStreamWriter writer = (MTOMXMLStreamWriter)serializer.getWriter();
@@ -57,14 +55,6 @@ public class OMDocumentHelper {
}
}
- if (cache || document.isComplete() || document.getBuilder() == null) {
- serializer.serializeChildren(document, cache);
- } else {
- StreamingOMSerializer streamingOMSerializer = new StreamingOMSerializer();
- XMLStreamReader reader = document.getXMLStreamReaderWithoutCaching();
- while (reader.getEventType() != XMLStreamReader.END_DOCUMENT) {
- streamingOMSerializer.serialize(reader, writer);
- }
- }
+ serializer.serializeChildren(document, cache);
}
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/SAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/SAXSerializer.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/SAXSerializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/SAXSerializer.java Tue Jan 29 21:58:27 2013
@@ -18,6 +18,9 @@
*/
package org.apache.axiom.om.impl.common.serializer;
+import javax.activation.DataHandler;
+
+import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMSerializable;
import org.xml.sax.ContentHandler;
@@ -44,6 +47,12 @@ public class SAXSerializer extends Seria
}
+ public void writeDTD(String rootName, String publicId, String systemId, String internalSubset)
+ throws OutputException {
+ // TODO Auto-generated method stub
+
+ }
+
protected void writeStartElement(String prefix, String namespaceURI, String localName)
throws OutputException {
// TODO Auto-generated method stub
@@ -61,6 +70,11 @@ public class SAXSerializer extends Seria
}
+ public void writeEndElement() throws OutputException {
+ // TODO Auto-generated method stub
+
+ }
+
public void writeText(int type, String data) throws OutputException {
char[] ch = data.toCharArray();
try {
@@ -84,4 +98,40 @@ public class SAXSerializer extends Seria
throw new OutputException(ex);
}
}
+
+ public void writeComment(String data) throws OutputException {
+ if (lexicalHandler != null) {
+ char[] ch = data.toCharArray();
+ try {
+ lexicalHandler.comment(ch, 0, ch.length);
+ } catch (SAXException ex) {
+ throw new OutputException(ex);
+ }
+ }
+ }
+
+ public void writeProcessingInstruction(String target, String data) throws OutputException {
+ try {
+ contentHandler.processingInstruction(target, data);
+ } catch (SAXException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
+ public void writeEntityRef(String name) throws OutputException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void writeDataHandler(DataHandler dataHandler, String contentID, boolean optimize)
+ throws OutputException {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID,
+ boolean optimize) throws OutputException {
+ // TODO Auto-generated method stub
+
+ }
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/Serializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/Serializer.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/Serializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/Serializer.java Tue Jan 29 21:58:27 2013
@@ -21,9 +21,13 @@ package org.apache.axiom.om.impl.common.
import java.util.ArrayList;
import java.util.Iterator;
+import javax.activation.DataHandler;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
+import org.apache.axiom.ext.stax.DTDReader;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
@@ -75,13 +79,25 @@ public abstract class Serializer {
finishStartElement();
}
- public final void copyEvent(XMLStreamReader reader) throws XMLStreamException, OutputException {
+ public final void copyEvent(XMLStreamReader reader, DataHandlerReader dataHandlerReader) throws XMLStreamException, OutputException {
int eventType = reader.getEventType();
switch (eventType) {
+ case XMLStreamReader.DTD:
+ DTDReader dtdReader;
+ try {
+ dtdReader = (DTDReader)reader.getProperty(DTDReader.PROPERTY);
+ } catch (IllegalArgumentException ex) {
+ dtdReader = null;
+ }
+ if (dtdReader == null) {
+ throw new XMLStreamException("Cannot serialize the DTD because the XMLStreamReader doesn't support the DTDReader extension");
+ }
+ writeDTD(dtdReader.getRootName(), dtdReader.getPublicId(), dtdReader.getSystemId(), reader.getText());
+ break;
case XMLStreamReader.START_ELEMENT:
beginStartElement(normalize(reader.getPrefix()), normalize(reader.getNamespaceURI()), reader.getLocalName());
for (int i=0, count=reader.getNamespaceCount(); i<count; i++) {
- generateSetPrefix(normalize(reader.getNamespacePrefix(i)), normalize(reader.getNamespacePrefix(i)), false);
+ generateSetPrefix(normalize(reader.getNamespacePrefix(i)), normalize(reader.getNamespaceURI(i)), false);
}
for (int i=0, count=reader.getAttributeCount(); i<count; i++) {
processAttribute(
@@ -92,11 +108,36 @@ public abstract class Serializer {
}
finishStartElement();
break;
+ case XMLStreamReader.END_ELEMENT:
+ writeEndElement();
+ break;
case XMLStreamReader.CHARACTERS:
+ if (dataHandlerReader != null && dataHandlerReader.isBinary()) {
+ if (dataHandlerReader.isDeferred()) {
+ writeDataHandler(dataHandlerReader.getDataHandlerProvider(),
+ dataHandlerReader.getContentID(), dataHandlerReader.isOptimized());
+ } else {
+ writeDataHandler(dataHandlerReader.getDataHandler(),
+ dataHandlerReader.getContentID(), dataHandlerReader.isOptimized());
+ }
+ break;
+ }
+ // Fall through
case XMLStreamReader.SPACE:
case XMLStreamReader.CDATA:
writeText(eventType, reader.getText());
break;
+ case XMLStreamReader.PROCESSING_INSTRUCTION:
+ writeProcessingInstruction(reader.getPITarget(), reader.getPIData());
+ break;
+ case XMLStreamReader.COMMENT:
+ writeComment(reader.getText());
+ break;
+ case XMLStreamReader.ENTITY_REFERENCE:
+ writeEntityRef(reader.getLocalName());
+ break;
+ default:
+ throw new IllegalStateException();
}
}
@@ -165,11 +206,25 @@ public abstract class Serializer {
protected abstract void setPrefix(String prefix, String namespaceURI) throws OutputException;
+ public abstract void writeDTD(String rootName, String publicId, String systemId, String internalSubset) throws OutputException;
+
protected abstract void writeStartElement(String prefix, String namespaceURI, String localName) throws OutputException;
protected abstract void writeNamespace(String prefix, String namespaceURI) throws OutputException;
protected abstract void writeAttribute(String prefix, String namespaceURI, String localName, String value) throws OutputException;
+ public abstract void writeEndElement() throws OutputException;
+
public abstract void writeText(int type, String data) throws OutputException;
+
+ public abstract void writeComment(String data) throws OutputException;
+
+ public abstract void writeProcessingInstruction(String target, String data) throws OutputException;
+
+ public abstract void writeEntityRef(String name) throws OutputException;
+
+ public abstract void writeDataHandler(DataHandler dataHandler, String contentID, boolean optimize) throws OutputException;
+
+ public abstract void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID, boolean optimize) throws OutputException;
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/StAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/StAXSerializer.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/StAXSerializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/StAXSerializer.java Tue Jan 29 21:58:27 2013
@@ -18,16 +18,25 @@
*/
package org.apache.axiom.om.impl.common.serializer;
-import org.apache.axiom.om.OMContainer;
-import org.apache.axiom.om.OMElement;
+import java.io.IOException;
+
+import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerReader;
+import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
+import org.apache.axiom.om.NodeUnavailableException;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMSerializable;
+import org.apache.axiom.om.impl.builder.StAXBuilder;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.common.IChildNode;
-import org.apache.axiom.om.impl.serialize.StreamingOMSerializer;
+import org.apache.axiom.om.impl.common.IContainer;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
+import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import javax.activation.DataHandler;
import javax.xml.namespace.NamespaceContext;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -37,24 +46,24 @@ public class StAXSerializer extends Seri
private static final Log log = LogFactory.getLog(StAXSerializer.class);
private final XMLStreamWriter writer;
+ private final DataHandlerWriter dataHandlerWriter;
public StAXSerializer(OMSerializable contextNode, XMLStreamWriter writer) {
super(contextNode);
this.writer = writer;
+ dataHandlerWriter = XMLStreamWriterUtils.getDataHandlerWriter(writer);
}
public XMLStreamWriter getWriter() {
return writer;
}
- /**
- * Method serializeEndpart.
- *
- * @throws javax.xml.stream.XMLStreamException
- *
- */
- public void serializeEndpart() throws XMLStreamException {
- writer.writeEndElement();
+ public void writeDTD(String rootName, String publicId, String systemId, String internalSubset) throws OutputException {
+ try {
+ XMLStreamWriterUtils.writeDTD(writer, rootName, publicId, systemId, internalSubset);
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
}
protected void writeStartElement(String prefix, String namespaceURI, String localName) throws OutputException {
@@ -85,16 +94,14 @@ public class StAXSerializer extends Seri
}
}
- public void serializeByPullStream(OMElement element, boolean cache) throws XMLStreamException {
- XMLStreamReader reader = element.getXMLStreamReader(cache);
- try {
- new StreamingOMSerializer().serialize(reader, writer);
- } finally {
- reader.close();
+ public void serializeChildren(IContainer container, boolean cache) throws XMLStreamException, OutputException {
+ if (container.getState() == IContainer.DISCARDED) {
+ StAXBuilder builder = (StAXBuilder)container.getBuilder();
+ if (builder != null) {
+ builder.debugDiscarded(container);
+ }
+ throw new NodeUnavailableException();
}
- }
-
- public void serializeChildren(OMContainer container, boolean cache) throws XMLStreamException, OutputException {
if (cache) {
IChildNode child = (IChildNode)container.getFirstOMChild();
while (child != null) {
@@ -102,18 +109,50 @@ public class StAXSerializer extends Seri
child = (IChildNode)child.getNextOMSibling();
}
} else {
- IChildNode child = (IChildNode)container.getFirstOMChild();
+ // First, recursively serialize all child nodes that have already been created
+ IChildNode child = (IChildNode)container.getFirstOMChildIfAvailable();
while (child != null) {
- if ((!(child instanceof OMElement)) || child.isComplete() ||
- ((OMElement)child).getBuilder() == null) {
- child.internalSerialize(this, false);
- } else {
- OMElement element = (OMElement) child;
- element.getBuilder().setCache(false);
- serializeByPullStream(element, cache);
- }
+ child.internalSerialize(this, cache);
child = (IChildNode)child.getNextOMSiblingIfAvailable();
}
+ // Next, if the container is incomplete, disable caching (temporarily)
+ // and serialize the nodes that have not been built yet by copying the
+ // events from the underlying XMLStreamReader.
+ if (!container.isComplete() && container.getBuilder() != null) {
+ StAXOMBuilder builder = (StAXOMBuilder)container.getBuilder();
+ builder.setCache(false);
+ XMLStreamReader reader = (XMLStreamReader)builder.disableCaching();
+ DataHandlerReader dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(reader);
+ int depth = 0;
+ loop: while (true) {
+ // We use the next() method on the builder instead of the XMLStreamReader
+ // because this takes care of lookahead and autoClose.
+ int event = builder.next();
+ switch (event) {
+ case XMLStreamReader.START_ELEMENT:
+ depth++;
+ break;
+ case XMLStreamReader.END_ELEMENT:
+ if (depth == 0) {
+ break loop;
+ } else {
+ depth--;
+ }
+ break;
+ case XMLStreamReader.END_DOCUMENT:
+ if (depth != 0) {
+ // If we get here, then we have seen a START_ELEMENT event without
+ // a matching END_ELEMENT
+ throw new IllegalStateException();
+ }
+ break loop;
+ }
+ // Note that we don't copy the final END_ELEMENT/END_DOCUMENT event for
+ // the container. This is the responsibility of the caller.
+ copyEvent(reader, dataHandlerReader);
+ }
+ builder.reenableCaching(container);
+ }
}
}
@@ -210,6 +249,14 @@ public class StAXSerializer extends Seri
}
}
+ public void writeEndElement() throws OutputException {
+ try {
+ writer.writeEndElement();
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
public void writeText(int type, String data) throws OutputException {
try {
if (type == OMNode.CDATA_SECTION_NODE) {
@@ -221,4 +268,50 @@ public class StAXSerializer extends Seri
throw new OutputException(ex);
}
}
+
+ public void writeComment(String data) throws OutputException {
+ try {
+ writer.writeComment(data);
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
+ public void writeProcessingInstruction(String target, String data) throws OutputException {
+ try {
+ writer.writeProcessingInstruction(target, data);
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
+ public void writeEntityRef(String name) throws OutputException {
+ try {
+ writer.writeEntityRef(name);
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
+ public void writeDataHandler(DataHandler dataHandler, String contentID, boolean optimize) throws OutputException {
+ try {
+ dataHandlerWriter.writeDataHandler(dataHandler, contentID, optimize);
+ } catch (IOException ex) {
+ // An OutputException thrown by StAXSerializer must always wrap an XMLStreamException!
+ throw new OutputException(new XMLStreamException("Error while reading data handler", ex));
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
+
+ public void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID, boolean optimize) throws OutputException {
+ try {
+ dataHandlerWriter.writeDataHandler(dataHandlerProvider, contentID, optimize);
+ } catch (IOException ex) {
+ // An OutputException thrown by StAXSerializer must always wrap an XMLStreamException!
+ throw new OutputException(new XMLStreamException("Error while reading data handler", ex));
+ } catch (XMLStreamException ex) {
+ throw new OutputException(ex);
+ }
+ }
}
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/CommentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/CommentImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/CommentImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/CommentImpl.java Tue Jan 29 21:58:27 2013
@@ -22,12 +22,11 @@ package org.apache.axiom.om.impl.dom;
import org.apache.axiom.om.OMComment;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
import org.w3c.dom.Comment;
import org.w3c.dom.Node;
-import javax.xml.stream.XMLStreamException;
-
public class CommentImpl extends CharacterImpl implements Comment, OMComment {
public CommentImpl(String value, OMFactory factory) {
super(value, factory);
@@ -53,8 +52,8 @@ public class CommentImpl extends Charact
return OMNode.COMMENT_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeComment(this.textValue);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeComment(this.textValue);
}
LeafNode createClone() {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java Tue Jan 29 21:58:27 2013
@@ -20,7 +20,6 @@
package org.apache.axiom.om.impl.dom;
import org.apache.axiom.om.OMCloneOptions;
-import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMFactory;
@@ -31,7 +30,7 @@ import org.apache.axiom.om.OMXMLParserWr
import org.apache.axiom.om.dom.DOMMetaFactory;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.OMNodeEx;
-import org.apache.axiom.om.impl.common.IContainer;
+import org.apache.axiom.om.impl.common.IDocument;
import org.apache.axiom.om.impl.common.OMContainerHelper;
import org.apache.axiom.om.impl.common.OMDocumentHelper;
import org.apache.axiom.om.impl.common.OMNamespaceImpl;
@@ -62,7 +61,7 @@ import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
-public class DocumentImpl extends RootNode implements Document, OMDocument, IContainer {
+public class DocumentImpl extends RootNode implements Document, IDocument {
protected OMXMLParserWrapper builder;
protected int state;
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentTypeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentTypeImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentTypeImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentTypeImpl.java Tue Jan 29 21:58:27 2013
@@ -19,13 +19,11 @@
package org.apache.axiom.om.impl.dom;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.axiom.om.OMDocType;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.impl.OMNodeEx;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
-import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import org.w3c.dom.DocumentType;
import org.w3c.dom.NamedNodeMap;
@@ -52,8 +50,8 @@ public class DocumentTypeImpl extends Le
return DOCUMENT_TYPE_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- XMLStreamWriterUtils.writeDTD(serializer.getWriter(), rootName, publicId, systemId, internalSubset);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeDTD(rootName, publicId, systemId, internalSubset);
}
public int getType() {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Tue Jan 29 21:58:27 2013
@@ -893,13 +893,9 @@ public class ElementImpl extends ParentN
public void internalSerialize(StAXSerializer serializer,
boolean cache) throws XMLStreamException, OutputException {
- if (cache || state == COMPLETE || (this.builder == null)) {
- serializer.serializeStartpart(this);
- serializer.serializeChildren(this, cache);
- serializer.serializeEndpart();
- } else {
- serializer.serializeByPullStream(this, cache);
- }
+ serializer.serializeStartpart(this);
+ serializer.serializeChildren(this, cache);
+ serializer.writeEndElement();
}
public String toStringWithConsume() throws XMLStreamException {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/EntityReferenceImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/EntityReferenceImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/EntityReferenceImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/EntityReferenceImpl.java Tue Jan 29 21:58:27 2013
@@ -18,11 +18,10 @@
*/
package org.apache.axiom.om.impl.dom;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.axiom.om.OMEntityReference;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
import org.w3c.dom.EntityReference;
import org.w3c.dom.Node;
@@ -41,8 +40,8 @@ public class EntityReferenceImpl extends
return OMNode.ENTITY_REFERENCE_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeEntityRef(name);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeEntityRef(name);
}
public String getName() {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ProcessingInstructionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ProcessingInstructionImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ProcessingInstructionImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ProcessingInstructionImpl.java Tue Jan 29 21:58:27 2013
@@ -19,12 +19,11 @@
package org.apache.axiom.om.impl.dom;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMProcessingInstruction;
import org.apache.axiom.om.impl.OMNodeEx;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
@@ -81,8 +80,8 @@ public class ProcessingInstructionImpl e
return value;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeProcessingInstruction(target + " ", value);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeProcessingInstruction(target + " ", value);
}
LeafNode createClone() {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextNodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextNodeImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextNodeImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/TextNodeImpl.java Tue Jan 29 21:58:27 2013
@@ -32,14 +32,12 @@ import org.apache.axiom.om.impl.common.s
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
import org.apache.axiom.util.UIDGenerator;
import org.apache.axiom.util.base64.Base64Utils;
-import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import org.w3c.dom.DOMException;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
import java.io.IOException;
public abstract class TextNodeImpl extends CharacterImpl implements Text, OMText {
@@ -342,22 +340,13 @@ public abstract class TextNodeImpl exten
}
}
- public void internalSerialize(StAXSerializer serializer, boolean cache)
- throws XMLStreamException, OutputException {
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
if (!this.isBinary) {
serializer.writeText(getType(), getText());
+ } else if (dataHandlerObject instanceof DataHandlerProvider) {
+ serializer.writeDataHandler((DataHandlerProvider)dataHandlerObject, contentID, optimize);
} else {
- try {
- if (dataHandlerObject instanceof DataHandlerProvider) {
- XMLStreamWriterUtils.writeDataHandler(serializer.getWriter(), (DataHandlerProvider)dataHandlerObject,
- contentID, optimize);
- } else {
- XMLStreamWriterUtils.writeDataHandler(serializer.getWriter(), (DataHandler)getDataHandler(),
- contentID, optimize);
- }
- } catch (IOException ex) {
- throw new OMException("Error reading data handler", ex);
- }
+ serializer.writeDataHandler((DataHandler)getDataHandler(), contentID, optimize);
}
}
Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPEnvelopeImpl.java Tue Jan 29 21:58:27 2013
@@ -202,20 +202,16 @@ public class SOAPEnvelopeImpl extends SO
xmlVersion == null ? OMConstants.DEFAULT_XML_VERSION
: xmlVersion);
}
- if (cache || state == COMPLETE || builder == null) {
- serializer.serializeStartpart(this);
- //serialize children
- for (Iterator it = getChildren(); it.hasNext(); ) {
- NodeImpl child = (NodeImpl)it.next();
- // Skip empty SOAPHeader (compatibility with previous Axiom versions; see AXIOM-340)
- if (!(child instanceof SOAPHeader && ((SOAPHeader)child).getFirstOMChild() == null)) {
- child.internalSerialize(serializer, cache);
- }
- }
- serializer.serializeEndpart();
- } else {
- serializer.serializeByPullStream(this, cache);
+ serializer.serializeStartpart(this);
+ //serialize children
+ for (Iterator it = getChildren(); it.hasNext(); ) {
+ NodeImpl child = (NodeImpl)it.next();
+ // Skip empty SOAPHeader (compatibility with previous Axiom versions; see AXIOM-340)
+ if (!(child instanceof SOAPHeader && ((SOAPHeader)child).getFirstOMChild() == null)) {
+ child.internalSerialize(serializer, cache);
+ }
}
+ serializer.writeEndElement();
}
public boolean hasFault() {
Modified: webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/soap/impl/dom/SOAPImplementationTest.java Tue Jan 29 21:58:27 2013
@@ -52,7 +52,7 @@ public class SOAPImplementationTest exte
builder.exclude(TestSetValueFromQNameWithExistingValue.class);
// TODO: AXIOM-430
- builder.exclude(TestSerialize.class, "(&(file=*/empty-header.xml)(|(serializationStrategy=OutputStream)(serializationStrategy=Writer)(serializationStrategy=XMLStreamWriter))(|(cache=true)(expand=fully)))");
+ builder.exclude(TestSerialize.class, "(&(file=*/empty-header.xml)(|(serializationStrategy=OutputStream)(serializationStrategy=Writer)(serializationStrategy=XMLStreamWriter)))");
return builder.build();
}
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMCommentImpl.java Tue Jan 29 21:58:27 2013
@@ -24,10 +24,9 @@ import org.apache.axiom.om.OMComment;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
-import javax.xml.stream.XMLStreamException;
-
public class OMCommentImpl extends OMLeafNode implements OMComment {
protected String value;
@@ -47,8 +46,8 @@ public class OMCommentImpl extends OMLea
return OMNode.COMMENT_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeComment(this.value);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeComment(this.value);
}
/**
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocTypeImpl.java Tue Jan 29 21:58:27 2013
@@ -24,10 +24,8 @@ import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMDocType;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
-import org.apache.axiom.util.stax.XMLStreamWriterUtils;
-
-import javax.xml.stream.XMLStreamException;
public class OMDocTypeImpl extends OMLeafNode implements OMDocType {
private final String rootName;
@@ -48,8 +46,8 @@ public class OMDocTypeImpl extends OMLea
return OMNode.DTD_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- XMLStreamWriterUtils.writeDTD(serializer.getWriter(), rootName, publicId, systemId, internalSubset);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeDTD(rootName, publicId, systemId, internalSubset);
}
public String getRootName() {
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java Tue Jan 29 21:58:27 2013
@@ -29,7 +29,7 @@ import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMXMLParserWrapper;
import org.apache.axiom.om.OMXMLStreamReaderConfiguration;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
-import org.apache.axiom.om.impl.common.IContainer;
+import org.apache.axiom.om.impl.common.IDocument;
import org.apache.axiom.om.impl.common.OMChildrenLocalNameIterator;
import org.apache.axiom.om.impl.common.OMChildrenNamespaceIterator;
import org.apache.axiom.om.impl.common.OMChildrenQNameIterator;
@@ -49,7 +49,7 @@ import javax.xml.transform.sax.SAXSource
import java.util.Iterator;
/** Class OMDocumentImpl */
-public class OMDocumentImpl extends OMSerializableImpl implements OMDocument, IContainer {
+public class OMDocumentImpl extends OMSerializableImpl implements IDocument {
protected OMXMLParserWrapper builder;
protected int state;
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java Tue Jan 29 21:58:27 2013
@@ -790,13 +790,9 @@ public class OMElementImpl extends OMNod
public void internalSerialize(StAXSerializer serializer, boolean cache)
throws XMLStreamException, OutputException {
- if (cache || state == COMPLETE || (this.builder == null)) {
- serializer.serializeStartpart(this);
- serializer.serializeChildren(this, cache);
- serializer.serializeEndpart();
- } else {
- serializer.serializeByPullStream(this, cache);
- }
+ serializer.serializeStartpart(this);
+ serializer.serializeChildren(this, cache);
+ serializer.writeEndElement();
}
////////////////////////////////////////////////////////////////////////////////////////////////
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMEntityReferenceImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMEntityReferenceImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMEntityReferenceImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMEntityReferenceImpl.java Tue Jan 29 21:58:27 2013
@@ -18,13 +18,12 @@
*/
package org.apache.axiom.om.impl.llom;
-import javax.xml.stream.XMLStreamException;
-
import org.apache.axiom.om.OMCloneOptions;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMEntityReference;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
public class OMEntityReferenceImpl extends OMLeafNode implements OMEntityReference {
@@ -42,8 +41,8 @@ public class OMEntityReferenceImpl exten
return OMNode.ENTITY_REFERENCE_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeEntityRef(name);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeEntityRef(name);
}
public String getName() {
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMProcessingInstructionImpl.java Tue Jan 29 21:58:27 2013
@@ -24,10 +24,9 @@ import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMProcessingInstruction;
+import org.apache.axiom.om.impl.common.serializer.OutputException;
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
-import javax.xml.stream.XMLStreamException;
-
public class OMProcessingInstructionImpl extends OMLeafNode implements OMProcessingInstruction {
protected String target;
protected String value;
@@ -50,8 +49,8 @@ public class OMProcessingInstructionImpl
return OMNode.PI_NODE;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException {
- serializer.getWriter().writeProcessingInstruction(this.target + " ", this.value);
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
+ serializer.writeProcessingInstruction(this.target + " ", this.value);
}
/**
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMTextImpl.java Tue Jan 29 21:58:27 2013
@@ -34,11 +34,9 @@ import org.apache.axiom.om.impl.common.s
import org.apache.axiom.om.impl.common.serializer.StAXSerializer;
import org.apache.axiom.util.UIDGenerator;
import org.apache.axiom.util.base64.Base64Utils;
-import org.apache.axiom.util.stax.XMLStreamWriterUtils;
import javax.activation.DataHandler;
import javax.xml.namespace.QName;
-import javax.xml.stream.XMLStreamException;
import java.io.IOException;
public class OMTextImpl extends OMLeafNode implements OMText, OMConstants {
@@ -354,22 +352,14 @@ public class OMTextImpl extends OMLeafNo
return this.contentID;
}
- public void internalSerialize(StAXSerializer serializer, boolean cache) throws XMLStreamException, OutputException {
+ public void internalSerialize(StAXSerializer serializer, boolean cache) throws OutputException {
if (!this.isBinary) {
serializer.writeText(getType(), getText());
+ } else if (dataHandlerObject instanceof DataHandlerProvider) {
+ serializer.writeDataHandler((DataHandlerProvider)dataHandlerObject, contentID, optimize);
} else {
- try {
- if (dataHandlerObject instanceof DataHandlerProvider) {
- XMLStreamWriterUtils.writeDataHandler(serializer.getWriter(), (DataHandlerProvider)dataHandlerObject,
- contentID, optimize);
- } else {
- XMLStreamWriterUtils.writeDataHandler(serializer.getWriter(), (DataHandler)getDataHandler(),
- contentID, optimize);
- }
- } catch (IOException ex) {
- throw new OMException("Error reading data handler", ex);
- }
+ serializer.writeDataHandler((DataHandler)getDataHandler(), contentID, optimize);
}
}
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPEnvelopeImpl.java Tue Jan 29 21:58:27 2013
@@ -203,20 +203,16 @@ public class SOAPEnvelopeImpl extends SO
: charSetEncoding,
xmlVersion == null ? OMConstants.DEFAULT_XML_VERSION : xmlVersion);
}
- if (cache || state == COMPLETE || builder == null) {
- serializer.serializeStartpart(this);
- //serialize children
- for (Iterator it = getChildren(); it.hasNext(); ) {
- OMNodeImpl child = (OMNodeImpl)it.next();
- // Skip empty SOAPHeader (compatibility with previous Axiom versions; see AXIOM-340)
- if (!(child instanceof SOAPHeader && ((SOAPHeader)child).getFirstOMChild() == null)) {
- child.internalSerialize(serializer, cache);
- }
- }
- serializer.serializeEndpart();
- } else {
- serializer.serializeByPullStream(this, cache);
+ serializer.serializeStartpart(this);
+ //serialize children
+ for (Iterator it = getChildren(); it.hasNext(); ) {
+ OMNodeImpl child = (OMNodeImpl)it.next();
+ // Skip empty SOAPHeader (compatibility with previous Axiom versions; see AXIOM-340)
+ if (!(child instanceof SOAPHeader && ((SOAPHeader)child).getFirstOMChild() == null)) {
+ child.internalSerialize(serializer, cache);
+ }
}
+ serializer.writeEndElement();
if (!cache) {
// let's try to close the builder/parser here since we are now done with the
// non-caching code block serializing the top-level SOAPEnvelope element
Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPFaultImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPFaultImpl.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPFaultImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPFaultImpl.java Tue Jan 29 21:58:27 2013
@@ -130,10 +130,10 @@ public abstract class SOAPFaultImpl exte
OMNodeImpl child = (OMNodeImpl)it.next();
// TODO: AXIOM-392
if (!((child instanceof SOAPFaultRole || child instanceof SOAPFaultNode) && ((OMElement)child).getText().length() == 0)) {
- child.internalSerialize(serializer, true);
+ child.internalSerialize(serializer, cache);
}
}
- serializer.serializeEndpart();
+ serializer.writeEndElement();
}
protected OMElement createClone(OMCloneOptions options, OMContainer targetParent) {
Modified: webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java Tue Jan 29 21:58:27 2013
@@ -41,7 +41,6 @@ public class OMImplementationTest extend
// TODO: this is not supported yet
builder.exclude(TestGetXMLStreamReaderWithIncompleteDescendant.class, "(cache=false)");
builder.exclude(org.apache.axiom.ts.om.sourcedelement.TestSerialize.class, "(&(expand=partially)(serializationStrategy=XMLStreamReader)(cache=false)(serializeParent=true))");
- builder.exclude(org.apache.axiom.ts.om.sourcedelement.TestSerialize.class, "(&(expand=partially)(container=element)(complete=false)(cache=false)(serializeParent=true))");
// TODO: this case is not working because Axiom generates an XML declaration
// but uses another charset encoding to serialize the document
Modified: webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/soap/impl/llom/SOAPImplementationTest.java Tue Jan 29 21:58:27 2013
@@ -30,7 +30,7 @@ public class SOAPImplementationTest exte
SOAPTestSuiteBuilder builder = new SOAPTestSuiteBuilder(new OMLinkedListMetaFactory(), true, true);
// TODO: AXIOM-430
- builder.exclude(TestSerialize.class, "(&(file=*/empty-header.xml)(|(serializationStrategy=OutputStream)(serializationStrategy=Writer)(serializationStrategy=XMLStreamWriter))(|(cache=true)(expand=fully)))");
+ builder.exclude(TestSerialize.class, "(&(file=*/empty-header.xml)(|(serializationStrategy=OutputStream)(serializationStrategy=Writer)(serializationStrategy=XMLStreamWriter)))");
return builder.build();
}
Modified: webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMCachingTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMCachingTest.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMCachingTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/OMCachingTest.java Tue Jan 29 21:58:27 2013
@@ -23,7 +23,7 @@ import javax.xml.stream.XMLStreamExcepti
public class OMCachingTest extends AbstractTestCase {
/** This will first serialize the element without caching. Then it tries to serialize again . */
- public void testCachingOne() {
+ public void testCachingOne() throws Exception {
OMElement documentElement = null;
try {
@@ -38,7 +38,7 @@ public class OMCachingTest extends Abstr
try {
String envelopeString = documentElement.toStringWithConsume();
fail("Parser should fail as its already being accessed without caching");
- } catch (XMLStreamException e) {
+ } catch (NodeUnavailableException e) {
assertTrue(true);
}
Modified: webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/serializer/OMSerializerTest.java Tue Jan 29 21:58:27 2013
@@ -20,6 +20,7 @@
package org.apache.axiom.om.impl.serializer;
import org.apache.axiom.om.AbstractTestCase;
+import org.apache.axiom.om.NodeUnavailableException;
import org.apache.axiom.om.OMXMLBuilderFactory;
import org.apache.axiom.om.OMXMLParserWrapper;
import org.apache.axiom.om.OMConstants;
@@ -33,8 +34,6 @@ import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import java.io.ByteArrayOutputStream;
-import java.io.PrintWriter;
-import java.io.StringWriter;
public class OMSerializerTest extends AbstractTestCase {
public void testElementPullStream1() throws Exception {
@@ -70,20 +69,13 @@ public class OMSerializerTest extends Ab
writer = StAXUtils.createXMLStreamWriter(byteArrayOutputStream,
OMConstants.DEFAULT_CHAR_SET_ENCODING);
- StringWriter stringWriter = new StringWriter();
-
//now we should not be able to serilaize anything ! this should throw
//an error
try {
env.serializeAndConsume(writer);
- fail();
- } catch (UnsupportedOperationException e) {
- e.printStackTrace(new PrintWriter(stringWriter, true));
- assertTrue(stringWriter.toString()
- .indexOf("The parser is already consumed!") > -1);
- } catch (Exception e) {
- e.printStackTrace();
- fail("Expecting an XMLStreamException, but got instead: " + e.getClass().getName() + ": " + e.getMessage());
+ fail("Expected NodeUnavailableException");
+ } catch (NodeUnavailableException ex) {
+ // Expected
}
}
Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestSerializeAndConsumeConsumed.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestSerializeAndConsumeConsumed.java?rev=1440169&r1=1440168&r2=1440169&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestSerializeAndConsumeConsumed.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestSerializeAndConsumeConsumed.java Tue Jan 29 21:58:27 2013
@@ -18,10 +18,10 @@
*/
package org.apache.axiom.ts.om.element;
-import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
+import org.apache.axiom.om.NodeUnavailableException;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMMetaFactory;
@@ -61,11 +61,9 @@ public class TestSerializeAndConsumeCons
try {
XMLStreamWriter writer = StAXUtils.createXMLStreamWriter(System.out);
documentElement.serializeAndConsume(writer);
- fail("Stream should be consumed by now");
- } catch (XMLStreamException e) {
+ fail("Expected NodeUnavailableException");
+ } catch (NodeUnavailableException e) {
//wea re cool
- } catch (Exception e) {
- fail("This should throw an XMLStreamException");
}
documentElement.close(false);