You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2016/02/06 16:18:01 UTC

svn commit: r1728847 - in /webservices/axiom/trunk: aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/ testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/

Author: veithen
Date: Sat Feb  6 15:18:00 2016
New Revision: 1728847

URL: http://svn.apache.org/viewvc?rev=1728847&view=rev
Log:
Simplify document creation in StAXOMBuilder.

Modified:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
    webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestNextBeforeGetDocumentElement.java

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java?rev=1728847&r1=1728846&r2=1728847&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java Sat Feb  6 15:18:00 2016
@@ -95,6 +95,14 @@ public final class BuilderHandler {
         }
     }
 
+    public AxiomDocument getDocument() {
+        if (root != null) {
+            throw new UnsupportedOperationException("There is no document linked to this builder");
+        } else {
+            return document;
+        }
+    }
+    
     private void addChild(AxiomChildNode node) {
         target.addChild(node, true);
         postProcessNode(node);

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java?rev=1728847&r1=1728846&r2=1728847&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java Sat Feb  6 15:18:00 2016
@@ -37,6 +37,7 @@ import org.apache.axiom.om.impl.builder.
 import org.apache.axiom.om.impl.builder.CustomBuilderSupport;
 import org.apache.axiom.om.impl.builder.Detachable;
 import org.apache.axiom.om.impl.intf.AxiomContainer;
+import org.apache.axiom.om.impl.intf.AxiomDocument;
 import org.apache.axiom.om.impl.intf.AxiomElement;
 import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
 import org.apache.axiom.om.impl.intf.TextContent;
@@ -129,12 +130,15 @@ public class StAXOMBuilder extends Abstr
      */
     private Exception parserException;
     
-    private int lookAheadToken = -1;
+    private int lookAheadToken = XMLStreamReader.START_DOCUMENT;
 
     protected StAXOMBuilder(NodeFactory nodeFactory, XMLStreamReader parser,
             boolean autoClose, Detachable detachable, Closeable closeable, Model model, PayloadSelector payloadSelector,
             AxiomSourcedElement root) {
         super(nodeFactory, model, root);
+        if (parser.getEventType() != XMLStreamReader.START_DOCUMENT) {
+            throw new IllegalStateException("The XMLStreamReader must be positioned on a START_DOCUMENT event");
+        }
         this.parser = parser;
         this.autoClose = autoClose;
         this.detachable = detachable;
@@ -464,18 +468,12 @@ public class StAXOMBuilder extends Abstr
         return old;
     }
     
-    private void createDocumentIfNecessary() {
-        if (handler.document == null && parser.getEventType() == XMLStreamReader.START_DOCUMENT) {
-            handler.startDocument(charEncoding, parser.getVersion(), parser.getCharacterEncodingScheme(), parser.isStandalone());
-        }
-    }
-    
     public final OMDocument getDocument() {
-        createDocumentIfNecessary();
-        if (handler.document == null) {
-            throw new UnsupportedOperationException("There is no document linked to this builder");
+        AxiomDocument document;
+        while ((document = handler.getDocument()) == null) {
+            next();
         }
-        return handler.document;
+        return document;
     }
 
     public final String getCharsetEncoding() {
@@ -556,7 +554,6 @@ public class StAXOMBuilder extends Abstr
             if (handler.done) {
                 throw new OMException();
             }
-            createDocumentIfNecessary();
             int token = parserNext();
             if (!handler.cache) {
                 return token;
@@ -565,6 +562,9 @@ public class StAXOMBuilder extends Abstr
             // Note: if autoClose is enabled, then the parser may be null at this point
             
             switch (token) {
+                case XMLStreamConstants.START_DOCUMENT:
+                    handler.startDocument(charEncoding, parser.getVersion(), parser.getCharacterEncodingScheme(), parser.isStandalone());
+                    break;
                 case XMLStreamConstants.START_ELEMENT: {
                     createNextOMElement();
                     break;
@@ -598,7 +598,8 @@ public class StAXOMBuilder extends Abstr
                     throw new OMException();
             }
             
-            if (handler.target == null && !handler.done) {
+            // TODO: this will fail if there is whitespace before the document element
+            if (token != XMLStreamConstants.START_DOCUMENT && handler.target == null && !handler.done) {
                 // We get here if the document has been discarded (by getDocumentElement(true)
                 // or because the builder is linked to an OMSourcedElement) and
                 // we just processed the END_ELEMENT event for the root element. In this case, we consume

Modified: webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestNextBeforeGetDocumentElement.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestNextBeforeGetDocumentElement.java?rev=1728847&r1=1728846&r2=1728847&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestNextBeforeGetDocumentElement.java (original)
+++ webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestNextBeforeGetDocumentElement.java Sat Feb  6 15:18:00 2016
@@ -40,8 +40,9 @@ public class TestNextBeforeGetDocumentEl
     protected void runTest() throws Throwable {
         OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(metaFactory.getOMFactory(),
                 new StringReader("<root>text</root>"));
-        assertEquals(XMLStreamReader.START_ELEMENT, builder.next());
-        assertEquals(XMLStreamReader.CHARACTERS, builder.next());
+        while (builder.next() != XMLStreamReader.CHARACTERS) {
+            // Just loop
+        }
         OMElement element = builder.getDocumentElement();
         assertEquals("root", element.getLocalName());
     }