You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2005/12/27 19:24:30 UTC

svn commit: r359259 - /webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java

Author: dims
Date: Tue Dec 27 10:24:28 2005
New Revision: 359259

URL: http://svn.apache.org/viewcvs?rev=359259&view=rev
Log:
Fix for problem reported here: http://marc.theaimsgroup.com/?l=axis-dev&m=113570250225223&w=2


Modified:
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java?rev=359259&r1=359258&r2=359259&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/om/impl/llom/OMStAXWrapper.java Tue Dec 27 10:24:28 2005
@@ -129,6 +129,11 @@
      */
     private OMNode lastNode = null;
 
+    /**
+     * Track depth to ensure we stop generating events when we are done with the root node.  
+     */
+    int depth = 0;
+
     private boolean needToThrowEndDocument = false;
 
     /**
@@ -852,7 +857,10 @@
                 } catch (Exception e) {
                     throw new XMLStreamException("problem accessing the parser", e);
                 }
-
+                // Initialize the depth
+                depth = 0;
+                // We should throw an END_DOCUMENT as well
+                needToThrowEndDocument = true;
                 if ((currentEvent == START_DOCUMENT) &&
                         (currentEvent == parser.getEventType())) {
                     currentEvent = parser.next();
@@ -945,6 +953,16 @@
                 }
             }
         } else {
+            if (state == SWITCHED) {
+                if (currentEvent == START_ELEMENT) {
+                    ++depth;
+                } else if (currentEvent == END_ELEMENT) {
+                    --depth;
+                    if(depth < 0) {
+                        state = COMPLETED;
+                    }
+                }
+            }
             state = (currentEvent == END_DOCUMENT)
                     ? DOCUMENT_COMPLETE
                     : state;