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/20 03:03:39 UTC

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

Author: veithen
Date: Sat Feb 20 02:03:39 2016
New Revision: 1731326

URL: http://svn.apache.org/viewvc?rev=1731326&view=rev
Log:
Enable builder support for compact parent nodes.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
    webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestDetach.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj?rev=1731326&r1=1731325&r2=1731326&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj Sat Feb 20 02:03:39 2016
@@ -67,7 +67,7 @@ public aspect CoreParentNodeSupport {
             Content content = new Content();
             CoreCharacterDataNode cdata = coreGetNodeFactory().createNode(CoreCharacterDataNode.class);
             cdata.internalSetParent(this);
-            cdata.coreSetCharacterData((String)this.content);
+            cdata.coreSetCharacterData(this.content);
             content.firstChild = cdata;
             content.lastChild = cdata;
             this.content = content;
@@ -129,8 +129,8 @@ public aspect CoreParentNodeSupport {
                 case CoreParentNode.INCOMPLETE:
                     do {
                         buildNext();
-                    } while (getState() == CoreParentNode.INCOMPLETE
-                            && (firstChild = coreGetFirstChildIfAvailable()) == null);
+                    } while ((firstChild = coreGetFirstChildIfAvailable()) == null
+                            && getState() == CoreParentNode.INCOMPLETE);
             }
         }
         return firstChild;

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=1731326&r1=1731325&r2=1731326&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 20 02:03:39 2016
@@ -27,6 +27,7 @@ import java.util.Queue;
 import javax.xml.stream.XMLStreamConstants;
 
 import org.apache.axiom.core.Builder;
+import org.apache.axiom.core.CoreCharacterDataNode;
 import org.apache.axiom.core.CoreNode;
 import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.core.NodeFactory;
@@ -75,6 +76,8 @@ public final class BuilderHandler implem
      */
     public int depth;
     
+    private Object pendingCharacterData;
+    
     /**
      * Stores the stack trace of the code that caused a node to be discarded or consumed. This is
      * only used if debug logging was enabled when builder was created.
@@ -134,8 +137,16 @@ public final class BuilderHandler implem
     }
     
     private void addChild(AxiomChildNode node) {
+        if (pendingCharacterData != null) {
+            AxiomCharacterDataNode cdataNode = nodeFactory.createNode(AxiomCharacterDataNode.class);
+            cdataNode.coreSetCharacterData(pendingCharacterData);
+            target.addChild(cdataNode, true);
+            pendingCharacterData = null;
+        }
         target.addChild(node, true);
-        nodeAdded(node);
+        if (!(node instanceof CoreCharacterDataNode)) {
+            nodeAdded(node);
+        }
     }
     
     public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding, boolean standalone) {
@@ -182,8 +193,12 @@ public final class BuilderHandler implem
     }
     
     public void endElement() {
-        depth--;
         target.setComplete(true);
+        if (pendingCharacterData != null) {
+            target.coreSetCharacterData(pendingCharacterData, null);
+            pendingCharacterData = null;
+        }
+        depth--;
         if (depth == 0) {
             // This is relevant for OMSourcedElements and for the case where the document has been discarded
             // using getDocumentElement(true). In these cases, this will actually set target to null. In all
@@ -220,10 +235,14 @@ public final class BuilderHandler implem
     }
     
     public void processCharacterData(Object data, boolean ignorable) {
-        AxiomCharacterDataNode node = nodeFactory.createNode(AxiomCharacterDataNode.class);
-        node.coreSetCharacterData(data);
-        node.coreSetIgnorable(ignorable);
-        addChild(node);
+        if (!ignorable && pendingCharacterData == null && target.coreGetFirstChildIfAvailable() == null) {
+            pendingCharacterData = data;
+        } else {
+            AxiomCharacterDataNode node = nodeFactory.createNode(AxiomCharacterDataNode.class);
+            node.coreSetCharacterData(data);
+            node.coreSetIgnorable(ignorable);
+            addChild(node);
+        }
     }
     
     public void processProcessingInstruction(String piTarget, String piData) {

Modified: webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestDetach.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestDetach.java?rev=1731326&r1=1731325&r2=1731326&view=diff
==============================================================================
--- webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestDetach.java (original)
+++ webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/sourcedelement/TestDetach.java Sat Feb 20 02:03:39 2016
@@ -47,7 +47,7 @@ public class TestDetach extends AxiomTes
     protected void runTest() throws Throwable {
         OMFactory factory = metaFactory.getOMFactory();
         String xml1 = "<root><a/><b/></root>";
-        String xml2 = "<child>test</child>";
+        String xml2 = "<child><c/><d/></child>";
         OMElement parent = OMXMLBuilderFactory.createOMBuilder(factory, new StringReader(xml1)).getDocumentElement();
         PullOMDataSource ds = new PullOMDataSource(xml2);
         OMSourcedElement omse = factory.createOMElement(ds, "child", null);