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/19 11:32:50 UTC

svn commit: r1435520 - in /webservices/commons/trunk/modules/axiom/modules: axiom-api/src/main/java/org/apache/axiom/om/impl/builder/ axiom-testsuite/src/main/java/org/apache/axiom/ts/om/ axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/ ax...

Author: veithen
Date: Sat Jan 19 10:32:49 2013
New Revision: 1435520

URL: http://svn.apache.org/viewvc?rev=1435520&view=rev
Log:
Consolidated some test cases, increased code coverage and fixed several issues in SAXOMBuilder.

Added:
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/strategy/BuilderFactory.java
      - copied, changed from r1435508, webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/BuilderFactory.java
Removed:
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElementWithDiscardDocument.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/BuilderFactory.java
Modified:
    webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElement.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetXMLStreamReader.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderCommentEvent.java
    webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderGetElementTextFromParser.java

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/SAXOMBuilder.java Sat Jan 19 10:32:49 2013
@@ -21,7 +21,6 @@ package org.apache.axiom.om.impl.builder
 
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMAttribute;
-import org.apache.axiom.om.OMContainer;
 import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
@@ -32,7 +31,6 @@ import org.apache.axiom.om.OMXMLBuilderF
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.OMContainerEx;
 import org.apache.axiom.om.impl.OMElementEx;
-import org.apache.axiom.om.impl.OMNodeEx;
 import org.xml.sax.Attributes;
 import org.xml.sax.Locator;
 import org.xml.sax.SAXException;
@@ -42,9 +40,7 @@ import org.xml.sax.ext.LexicalHandler;
 import org.xml.sax.helpers.DefaultHandler;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 
 import javax.xml.XMLConstants;
@@ -86,17 +82,13 @@ public class SAXOMBuilder extends Defaul
      */
     private boolean inExternalSubset;
     
-    OMElement root = null;
+    private OMContainerEx target;
 
-    OMNode lastNode = null;
-
-    OMElement nextElem = null;
+    private OMElement nextElement;
 
     private final OMFactoryEx factory;
 
-    List prefixMappings = new ArrayList();
-    
-    int textNodeType = OMNode.TEXT_NODE;
+    private int textNodeType = OMNode.TEXT_NODE;
     
     private boolean inEntityReference;
     private int entityReferenceDepth;
@@ -132,32 +124,20 @@ public class SAXOMBuilder extends Defaul
         this(OMAbstractFactory.getOMFactory());
     }
     
-    private OMContainer getContainer() {
-        if (lastNode != null) {
-            return lastNode.isComplete() ? lastNode.getParent() : (OMContainer)lastNode;
-        } else if (document != null) {
-            return document;
-        } else {
-            throw new OMException("Unexpected event. There is no container to add the node to.");
-        }
-    }
-    
-    private void addNode(OMNode node) {
-        if (root == null && node instanceof OMElement) {
-            root = (OMElement)node;
-        }
-        lastNode = node;
-    }
-    
     public void setDocumentLocator(Locator locator) {
     }
 
     public void startDocument() throws SAXException {
         document = factory.createOMDocument(this);
+        target = (OMContainerEx)document;
     }
 
     public void endDocument() throws SAXException {
-        ((OMContainerEx)document).setComplete(true);
+        if (target != document) {
+            throw new IllegalStateException();
+        }
+        target.setComplete(true);
+        target = null;
     }
 
     public void startDTD(String name, String publicId, String systemId) throws SAXException {
@@ -257,15 +237,13 @@ public class SAXOMBuilder extends Defaul
     }
 
     public void endDTD() throws SAXException {
-        addNode(factory.createOMDocType(getContainer(), dtdName, dtdPublicId, dtdSystemId,
-                internalSubset.length() == 0 ? null : internalSubset.toString(), true));
+        factory.createOMDocType(target, dtdName, dtdPublicId, dtdSystemId,
+                internalSubset.length() == 0 ? null : internalSubset.toString(), true);
         internalSubset = null;
     }
 
     protected OMElement createNextElement(String localName) throws OMException {
-        OMElement element = factory.createOMElement(localName, getContainer(), this);
-        addNode(element);
-        return element;
+        return factory.createOMElement(localName, target, this);
     }
 
     /*
@@ -277,10 +255,10 @@ public class SAXOMBuilder extends Defaul
     public void startPrefixMapping(String prefix, String uri)
             throws SAXException {
         if (!inEntityReference) {
-            if (nextElem == null) {
-                nextElem = createNextElement("DUMMY");
+            if (nextElement == null) {
+                nextElement = createNextElement("DUMMY");
             }
-            ((OMElementEx)nextElem).addNamespaceDeclaration(uri, prefix);
+            ((OMElementEx)nextElement).addNamespaceDeclaration(uri, prefix);
         }
     }
 
@@ -298,14 +276,14 @@ public class SAXOMBuilder extends Defaul
         if (!inEntityReference) {
             if (localName == null || localName.trim().equals(""))
                 localName = qName.substring(qName.indexOf(':') + 1);
-            if (nextElem == null)
-                nextElem = createNextElement(localName);
+            if (nextElement == null)
+                nextElement = createNextElement(localName);
             else
-                nextElem.setLocalName(localName);
+                nextElement.setLocalName(localName);
     
             int idx = qName.indexOf(':');
             String prefix = idx == -1 ? "" : qName.substring(0, idx);
-            BuilderUtil.setNamespace(nextElem, namespaceURI, prefix, false);
+            BuilderUtil.setNamespace(nextElement, namespaceURI, prefix, false);
             
             int j = atts.getLength();
             for (int i = 0; i < j; i++) {
@@ -319,7 +297,7 @@ public class SAXOMBuilder extends Defaul
                     String attrNamespaceURI = atts.getURI(i);
                     OMNamespace ns;
                     if (attrNamespaceURI.length() > 0) {
-                        ns = nextElem.findNamespace(atts.getURI(i), null);
+                        ns = nextElement.findNamespace(atts.getURI(i), null);
                         if (ns == null) {
                             // The "xml" prefix is not necessarily declared explicitly; in this case,
                             // create a new OMNamespace instance.
@@ -332,13 +310,13 @@ public class SAXOMBuilder extends Defaul
                     } else {
                         ns = null;
                     }
-                    OMAttribute attr = nextElem.addAttribute(atts.getLocalName(i), atts.getValue(i), ns);
+                    OMAttribute attr = nextElement.addAttribute(atts.getLocalName(i), atts.getValue(i), ns);
                     attr.setAttributeType(atts.getType(i));
                 }
             }
             
-            lastNode = nextElem;
-            nextElem = null;
+            target = (OMContainerEx)nextElement;
+            nextElement = null;
         }
     }
 
@@ -351,14 +329,8 @@ public class SAXOMBuilder extends Defaul
     public void endElement(String uri, String localName, String qName)
             throws SAXException {
         if (!inEntityReference) {
-            if (lastNode.isComplete()) {
-                OMContainer parent = lastNode.getParent();
-                ((OMNodeEx) parent).setComplete(true);
-                lastNode = (OMNode) parent;
-            } else {
-                OMElement e = (OMElement) lastNode;
-                ((OMNodeEx) e).setComplete(true);
-            }
+            target.setComplete(true);
+            target = (OMContainerEx)((OMNode)target).getParent();
         }
     }
 
@@ -377,7 +349,7 @@ public class SAXOMBuilder extends Defaul
     public void characterData(char[] ch, int start, int length, int nodeType)
             throws SAXException {
         if (!inEntityReference) {
-            addNode(factory.createOMText(getContainer(), new String(ch, start, length), nodeType, true));
+            factory.createOMText(target, new String(ch, start, length), nodeType, true);
         }
     }
 
@@ -395,20 +367,16 @@ public class SAXOMBuilder extends Defaul
         }
     }
 
-    public void processingInstruction(String target, String data)
+    public void processingInstruction(String piTarget, String data)
             throws SAXException {
         if (!inEntityReference) {
-            addNode(factory.createOMProcessingInstruction(getContainer(), target, data, true));
+            factory.createOMProcessingInstruction(target, piTarget, data, true);
         }
     }
 
     public void comment(char[] ch, int start, int length) throws SAXException {
         if (!inEntityReference) {
-            if (lastNode == null) {
-                // Do nothing: the comment appears before the root element.
-                return;
-            } 
-            addNode(factory.createOMComment(getContainer(), new String(ch, start, length), true));
+            factory.createOMComment(target, new String(ch, start, length), true);
         }
     }
 
@@ -421,7 +389,7 @@ public class SAXOMBuilder extends Defaul
         } else if (name.equals("[dtd]")) {
             inExternalSubset = true;
         } else if (!expandEntityReferences) {
-            addNode(factory.createOMEntityReference(getContainer(), name, entities == null ? null : (String)entities.get(name), true));
+            factory.createOMEntityReference(target, name, entities == null ? null : (String)entities.get(name), true);
             inEntityReference = true;
             entityReferenceDepth = 1;
         }
@@ -471,10 +439,12 @@ public class SAXOMBuilder extends Defaul
     /**
      * Get the root element of the Axiom tree built by this content handler.
      * 
+     * @deprecated
      * @return the root element of the tree
      * @throws OMException if the tree is not complete
      */
     public OMElement getRootElement() {
+        OMElement root = getDocumentElement();
         if (root != null && root.isComplete()) {
             return root;
         } else {
@@ -512,7 +482,9 @@ public class SAXOMBuilder extends Defaul
 
     public OMElement getDocumentElement(boolean discardDocument) {
         OMElement documentElement = getDocument().getOMDocumentElement();
-        documentElement.detach();
+        if (discardDocument) {
+            documentElement.detach();
+        }
         return documentElement;
     }
 

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/OMTestSuiteBuilder.java Sat Jan 19 10:32:49 2013
@@ -25,7 +25,6 @@ import javax.xml.namespace.QName;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.testutils.conformance.ConformanceTestFile;
 import org.apache.axiom.testutils.suite.TestSuiteBuilder;
-import org.apache.axiom.ts.om.container.BuilderFactory;
 import org.apache.axiom.ts.om.container.OMContainerFactory;
 import org.apache.axiom.ts.om.container.OMElementFactory;
 import org.apache.axiom.ts.om.factory.CreateOMElementParentSupplier;
@@ -33,6 +32,7 @@ import org.apache.axiom.ts.om.factory.Cr
 import org.apache.axiom.ts.om.sourcedelement.OMSourcedElementVariant;
 import org.apache.axiom.ts.om.xpath.AXIOMXPathTestCase;
 import org.apache.axiom.ts.om.xpath.TestAXIOMXPath;
+import org.apache.axiom.ts.strategy.BuilderFactory;
 import org.apache.axiom.ts.strategy.ExpansionStrategy;
 import org.apache.axiom.ts.strategy.serialization.SerializationStrategy;
 import org.apache.axiom.ts.strategy.serialization.SerializeFromXMLStreamReader;
@@ -113,8 +113,12 @@ public class OMTestSuiteBuilder extends 
         addTest(new org.apache.axiom.ts.om.builder.TestCreateStAXOMBuilderIncorrectState(metaFactory));
         addTest(new org.apache.axiom.ts.om.builder.TestCreateStAXOMBuilderNamespaceRepairing(metaFactory));
         addTest(new org.apache.axiom.ts.om.builder.TestCreateStAXOMBuilderNamespaceRepairing2(metaFactory));
-        addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElement(metaFactory));
-        addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElementWithDiscardDocument(metaFactory));
+        for (int i=0; i<builderFactories.length; i++) {
+            BuilderFactory bf = builderFactories[i];
+            addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElement(metaFactory, bf, null));
+            addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElement(metaFactory, bf, Boolean.FALSE));
+            addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElement(metaFactory, bf, Boolean.TRUE));
+        }
         addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElementWithDiscardDocumentIllFormedEpilog(metaFactory));
         addTest(new org.apache.axiom.ts.om.builder.TestGetDocumentElementWithIllFormedDocument(metaFactory));
         addTest(new org.apache.axiom.ts.om.builder.TestInvalidXML(metaFactory));

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElement.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElement.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElement.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/builder/TestGetDocumentElement.java Sat Jan 19 10:32:49 2013
@@ -23,28 +23,65 @@ import java.io.StringReader;
 import org.apache.axiom.om.OMComment;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
-import org.apache.axiom.om.OMXMLBuilderFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.ts.AxiomTestCase;
+import org.apache.axiom.ts.strategy.BuilderFactory;
+import org.custommonkey.xmlunit.XMLAssert;
+import org.xml.sax.InputSource;
 
 /**
- * Tests the behavior of {@link OMXMLParserWrapper#getDocumentElement()}.
+ * Tests the behavior of {@link OMXMLParserWrapper#getDocumentElement()} and
+ * {@link OMXMLParserWrapper#getDocumentElement(boolean)}.
  */
 public class TestGetDocumentElement extends AxiomTestCase {
-    public TestGetDocumentElement(OMMetaFactory metaFactory) {
+    private final BuilderFactory builderFactory;
+    private final Boolean discardDocument;
+    
+    public TestGetDocumentElement(OMMetaFactory metaFactory, BuilderFactory builderFactory, Boolean discardDocument) {
         super(metaFactory);
+        this.builderFactory = builderFactory;
+        this.discardDocument = discardDocument;
+        builderFactory.addTestProperties(this);
+        addTestProperty("discardDocument", String.valueOf(discardDocument));
     }
 
     protected void runTest() throws Throwable {
-        OMXMLParserWrapper builder = OMXMLBuilderFactory.createOMBuilder(metaFactory.getOMFactory(),
-                new StringReader("<!--comment1--><root/><!--comment2-->"));
-        OMElement element = builder.getDocumentElement();
+        OMXMLParserWrapper builder = builderFactory.getBuilder(metaFactory,
+                new InputSource(new StringReader("<!--comment1--><root/><!--comment2-->")));
+        OMElement element;
+        if (discardDocument == null) {
+            element = builder.getDocumentElement();
+        } else {
+            element = builder.getDocumentElement(discardDocument.booleanValue());
+        }
         assertNotNull("Document element can not be null", element);
         assertEquals("Name of the document element is wrong", "root", element.getLocalName());
-        // The getDocumentElement doesn't detach the document element from the document:
-        assertSame(builder.getDocument(), element.getParent());
-        assertSame(builder.getDocument().getOMDocumentElement(), element);
-        assertTrue(element.getPreviousOMSibling() instanceof OMComment);
-        assertTrue(element.getNextOMSibling() instanceof OMComment);
+        if (Boolean.TRUE.equals(discardDocument)) {
+            if (builderFactory.isDeferredParsing()) {
+                assertFalse(element.isComplete());
+            }
+            assertNull(element.getParent());
+            // Note: we can't test getNextOMSibling here because this would build the element
+            assertNull(element.getPreviousOMSibling());
+            OMElement newParent = element.getOMFactory().createOMElement("newParent", null);
+            newParent.addChild(element);
+            if (builderFactory.isDeferredParsing()) {
+                assertFalse(element.isComplete());
+                assertFalse(builder.isCompleted());
+            }
+            XMLAssert.assertXMLEqual("<newParent><root/></newParent>", newParent.toString());
+            assertTrue(element.isComplete());
+            // Since we discarded the document, the nodes in the epilog will not be accessible.
+            // Therefore we expect that when the document element changes its completion status,
+            // the builder will consume the epilog and change its completion status as well.
+            // This gives the underlying parser a chance to release some resources.
+            assertTrue(builder.isCompleted());
+        } else {
+            // The getDocumentElement doesn't detach the document element from the document:
+            assertSame(builder.getDocument(), element.getParent());
+            assertSame(builder.getDocument().getOMDocumentElement(), element);
+            assertTrue(element.getPreviousOMSibling() instanceof OMComment);
+            assertTrue(element.getNextOMSibling() instanceof OMComment);
+        }
     }
 }

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetXMLStreamReader.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetXMLStreamReader.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetXMLStreamReader.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/TestGetXMLStreamReader.java Sat Jan 19 10:32:49 2013
@@ -29,6 +29,7 @@ import org.apache.axiom.om.util.StAXUtil
 import org.apache.axiom.testutils.conformance.ConformanceTestFile;
 import org.apache.axiom.testutils.stax.XMLStreamReaderComparator;
 import org.apache.axiom.ts.ConformanceTestCase;
+import org.apache.axiom.ts.strategy.BuilderFactory;
 import org.xml.sax.InputSource;
 
 /**

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderCommentEvent.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderCommentEvent.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderCommentEvent.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderCommentEvent.java Sat Jan 19 10:32:49 2013
@@ -26,7 +26,7 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.ts.AxiomTestCase;
-import org.apache.axiom.ts.om.container.BuilderFactory;
+import org.apache.axiom.ts.strategy.BuilderFactory;
 import org.xml.sax.InputSource;
 
 public class TestGetXMLStreamReaderCommentEvent extends AxiomTestCase {

Modified: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderGetElementTextFromParser.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderGetElementTextFromParser.java?rev=1435520&r1=1435519&r2=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderGetElementTextFromParser.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/element/TestGetXMLStreamReaderGetElementTextFromParser.java Sat Jan 19 10:32:49 2013
@@ -26,7 +26,7 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.ts.AxiomTestCase;
-import org.apache.axiom.ts.om.container.BuilderFactory;
+import org.apache.axiom.ts.strategy.BuilderFactory;
 import org.xml.sax.InputSource;
 
 public class TestGetXMLStreamReaderGetElementTextFromParser extends AxiomTestCase {

Copied: webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/strategy/BuilderFactory.java (from r1435508, webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/BuilderFactory.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/strategy/BuilderFactory.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/strategy/BuilderFactory.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/BuilderFactory.java&r1=1435508&r2=1435520&rev=1435520&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/container/BuilderFactory.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/strategy/BuilderFactory.java Sat Jan 19 10:32:49 2013
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.ts.om.container;
+package org.apache.axiom.ts.strategy;
 
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.SAXParser;
@@ -28,7 +28,6 @@ import org.apache.axiom.om.OMXMLBuilderF
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.testutils.stax.XMLStreamReaderComparator;
 import org.apache.axiom.ts.AxiomTestCase;
-import org.apache.axiom.ts.strategy.Strategy;
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
 
@@ -41,6 +40,10 @@ public interface BuilderFactory extends 
      * instantiate an appropriate parser.
      */
     BuilderFactory PARSER = new BuilderFactory() {
+        public boolean isDeferredParsing() {
+            return true;
+        }
+
         public void configureXMLStreamReaderComparator(XMLStreamReaderComparator comparator) {
         }
 
@@ -59,6 +62,10 @@ public interface BuilderFactory extends 
      * tree to Axiom.
      */
     BuilderFactory DOM = new BuilderFactory() {
+        public boolean isDeferredParsing() {
+            return true;
+        }
+
         public void configureXMLStreamReaderComparator(XMLStreamReaderComparator comparator) {
             // DOM gives access to the parsed replacement value (via the Entity interface), but Axiom
             // stores the unparsed replacement value. Therefore OMEntityReference#getReplacementText()
@@ -83,6 +90,10 @@ public interface BuilderFactory extends 
      * Creates an {@link OMXMLParserWrapper} by passing a {@link SAXSource} to Axiom.
      */
     BuilderFactory SAX = new BuilderFactory() {
+        public boolean isDeferredParsing() {
+            return false;
+        }
+
         public void configureXMLStreamReaderComparator(XMLStreamReaderComparator comparator) {
             // SAX doesn't provide this information
             comparator.setCompareCharacterEncodingScheme(false);
@@ -103,6 +114,15 @@ public interface BuilderFactory extends 
         }
     };
     
+    /**
+     * Determines if the builder created by this strategy supports deferred parsing.
+     * 
+     * @return <code>true</code> if the builder supports deferred parsing, <code>false</code> if the
+     *         builder doesn't support deferred parsing and will build the document all in once
+     *         (this is the case for SAX only)
+     */
+    boolean isDeferredParsing();
+    
     void configureXMLStreamReaderComparator(XMLStreamReaderComparator comparator);
     
     OMXMLParserWrapper getBuilder(OMMetaFactory metaFactory, InputSource inputSource) throws Exception;