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/05/20 10:27:03 UTC

svn commit: r1484396 - 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: Mon May 20 08:27:03 2013
New Revision: 1484396

URL: http://svn.apache.org/r1484396
Log:
AXIOM-288: Handle lookahead and auto-close in a more consistent way.

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/OMContainerHelper.java
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.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=1484396&r1=1484395&r2=1484396&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 Mon May 20 08:27:03 2013
@@ -86,6 +86,12 @@ public abstract class StAXBuilder implem
 
     protected String charEncoding = null;
     
+    /**
+     * Specifies whether the builder/parser should be automatically closed when the
+     * {@link XMLStreamConstants#END_DOCUMENT} event is reached.
+     */
+    boolean autoClose;
+    
     protected boolean _isClosed = false;              // Indicate if parser is closed
 
     // Fields for Custom Builder implementation
@@ -542,6 +548,9 @@ public abstract class StAXBuilder implem
      */
     public XMLStreamReader disableCaching() {
         cache = false;
+        // Always advance to the event right after the current node; this also takes
+        // care of lookahead
+        parserNext();
         return parser;
     }
     
@@ -580,6 +589,9 @@ public abstract class StAXBuilder implem
         } else {
             target = (OMContainerEx)((OMElement)container).getParent();
         }
+        if (done && autoClose) {
+            close();
+        }
         cache = true;
     }
 
@@ -759,6 +771,14 @@ public abstract class StAXBuilder implem
         return this.charEncoding;
     }
     
+    /**
+     * For internal use only.
+     * 
+     * @param autoClose
+     */
+    public void setAutoClose(boolean autoClose) {
+        this.autoClose = autoClose;
+    }
     
     /**
      * @return if parser is closed

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=1484396&r1=1484395&r2=1484396&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 Mon May 20 08:27:03 2013
@@ -95,12 +95,6 @@ public class StAXOMBuilder extends StAXB
     // on an OMElement is interned.
     private boolean namespaceURIInterning = false;
     
-    /**
-     * Specifies whether the builder/parser should be automatically closed when the
-     * {@link XMLStreamConstants#END_DOCUMENT} event is reached.
-     */
-    private boolean autoClose;
-    
     private int lookAheadToken = -1;
     
     /**
@@ -659,15 +653,6 @@ public class StAXOMBuilder extends StAXB
     }
     
     /**
-     * For internal use only.
-     * 
-     * @param autoClose
-     */
-    public void setAutoClose(boolean autoClose) {
-        this.autoClose = autoClose;
-    }
-
-    /**
      * Pushes the virtual parser ahead one token.
      * If a look ahead token was calculated it is returned.
      * @return next token

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMContainerHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMContainerHelper.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMContainerHelper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/OMContainerHelper.java Mon May 20 08:27:03 2013
@@ -50,14 +50,6 @@ public final class OMContainerHelper {
     
     public static XMLStreamReader getXMLStreamReader(IContainer container, boolean cache, OMXMLStreamReaderConfiguration configuration) {
         OMXMLParserWrapper builder = container.getBuilder();
-        if (builder != null && builder instanceof StAXOMBuilder) {
-            if (!container.isComplete()) {
-                if (((StAXOMBuilder) builder).isLookahead()) {
-                    buildNext(container);
-                }
-            }
-        }
-        
         if (builder != null && builder.isCompleted() && !cache && !container.isComplete()) {
             throw new UnsupportedOperationException("The parser is already consumed!");
         }

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java Mon May 20 08:27:03 2013
@@ -122,16 +122,14 @@ abstract class AbstractWrapper extends P
     }
     
     final boolean doNext() throws XMLStreamException {
+        if (reader.getEventType() == XMLStreamReader.START_ELEMENT) {
+            depth++;
+        }
         if (depth == 0) {
             return false;
         } else {
-            switch (reader.next()) {
-                case XMLStreamReader.START_ELEMENT:
-                    depth++;
-                    break;
-                case XMLStreamReader.END_ELEMENT:
-                    depth--;
-                    break;
+            if (reader.next() == XMLStreamReader.END_ELEMENT) {
+                depth--;
             }
             return true;
         }

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java Mon May 20 08:27:03 2013
@@ -23,7 +23,7 @@ import javax.xml.stream.XMLStreamReader;
 
 final class IncludeWrapper extends AbstractWrapper {
     IncludeWrapper(PullSerializer serializer, XMLStreamReader parent) {
-        super(serializer, parent, 1);
+        super(serializer, parent, 0);
     }
 
     void released() throws XMLStreamException {

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java Mon May 20 08:27:03 2013
@@ -650,7 +650,6 @@ final class Navigator extends PullSerial
             serializer.pushState(wrapper);
             node = container;
             visited = true;
-            wrapper.next();
         }
     }
 

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/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/push/Serializer.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java Mon May 20 08:27:03 2013
@@ -286,11 +286,20 @@ public abstract class Serializer {
                 StAXOMBuilder builder = (StAXOMBuilder)container.getBuilder();
                 XMLStreamReader reader = builder.disableCaching();
                 DataHandlerReader dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(reader);
+                boolean first = true;
                 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();
+                    int event;
+                    if (first) {
+                        event = reader.getEventType();
+                        first = false;
+                    } else {
+                        try {
+                            event = reader.next();
+                        } catch (XMLStreamException ex) {
+                            throw new DeferredParsingException(ex);
+                        }
+                    }
                     switch (event) {
                         case XMLStreamReader.START_ELEMENT:
                             depth++;