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);