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);