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/12 11:17:05 UTC
svn commit: r1481499 - in /webservices/axiom/trunk/modules:
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/
axiom-dom/src/test/java/org/apache/axiom/om/im...
Author: veithen
Date: Sun May 12 09:17:04 2013
New Revision: 1481499
URL: http://svn.apache.org/r1481499
Log:
* AXIOM-201: Ensure that getXMLStreamReader expands OMSourcedElements only if strictly necessary.
* AXIOM-431: Fully support the scenario (getting an XMLStreamReader from a programmatically created element with an incomplete descendant) with cache=false.
Modified:
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/SwitchingWrapper.java
webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
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=1481499&r1=1481498&r2=1481499&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 Sun May 12 09:17:04 2013
@@ -64,10 +64,6 @@ public final class OMContainerHelper {
if ((builder == null) && done) {
reader = new OMStAXWrapper(null, container, cache, configuration.isPreserveNamespaceContext());
} else {
- if ((builder == null) && !cache) {
- throw new UnsupportedOperationException(
- "This element was not created in a manner to be switched");
- }
if (builder != null && builder.isCompleted() && !cache && !done) {
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/SwitchingWrapper.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/SwitchingWrapper.java?rev=1481499&r1=1481498&r2=1481499&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/SwitchingWrapper.java Sun May 12 09:17:04 2013
@@ -896,14 +896,6 @@ class SwitchingWrapper extends AbstractX
private OMNode _getFirstChild(OMContainer node) {
if (cache) {
return node.getFirstOMChild();
- } else if (node.getBuilder() != rootNode.getBuilder()) {
- // TODO: We have a problem if the tree has parts constructed by different builders; this is related to AXIOM-201 and AXIOM-431
- OMNode first = node.getFirstOMChild();
- OMNode sibling = first;
- while (sibling != null) {
- sibling = sibling.getNextOMSibling();
- }
- return first;
} else {
return ((IContainer)node).getFirstOMChildIfAvailable();
}
@@ -958,7 +950,7 @@ class SwitchingWrapper extends AbstractX
if (nextSibling != null) {
nextNode = nextSibling;
visited = false;
- } else if (parent.isComplete()) {
+ } else if (parent.isComplete() || parent.getBuilder() == null) { // TODO: review this condition
nextNode = parent;
visited = true;
} else {
@@ -994,17 +986,19 @@ class SwitchingWrapper extends AbstractX
} else {
container = (OMContainer)node;
}
+ StAXOMBuilder builder = (StAXOMBuilder)container.getBuilder();
int depth = 1;
- // Find the root node for the builder
+ // Find the root node for the builder (i.e. the topmost node having the same
+ // builder as the current node)
while (container != rootNode && container instanceof OMElement) {
- OMElement element = (OMElement)container;
- if (element.getBuilder() != builder) {
+ OMContainer parent = ((OMElement)container).getParent();
+ if (parent.getBuilder() != builder) {
break;
}
- container = element.getParent();
+ container = parent;
depth++;
}
- PullThroughWrapper wrapper = new PullThroughWrapper(streamSwitch, this, (StAXOMBuilder)builder, container, ((StAXOMBuilder)builder).disableCaching(), depth);
+ PullThroughWrapper wrapper = new PullThroughWrapper(streamSwitch, this, builder, container, builder.disableCaching(), depth);
streamSwitch.setParent(wrapper);
node = container;
visited = true;
Modified: webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java?rev=1481499&r1=1481498&r2=1481499&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java Sun May 12 09:17:04 2013
@@ -28,7 +28,6 @@ import org.apache.axiom.ts.om.container.
import org.apache.axiom.ts.om.document.TestClone;
import org.apache.axiom.ts.om.document.TestDigest;
import org.apache.axiom.ts.om.element.TestGetChildrenWithName4;
-import org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithIncompleteDescendant;
import org.apache.axiom.ts.om.element.TestSerializationWithTwoNonBuiltOMElements;
import org.apache.axiom.ts.om.node.TestInsertSiblingAfterOnChild;
import org.apache.axiom.ts.om.node.TestInsertSiblingBeforeOnChild;
@@ -57,9 +56,6 @@ public class OMImplementationTest extend
// TODO
builder.exclude(TestSerializationWithTwoNonBuiltOMElements.class);
- // TODO: this is not supported yet
- builder.exclude(TestGetXMLStreamReaderWithIncompleteDescendant.class, "(cache=false)");
-
// TODO: not yet working
builder.exclude(TestGetSAXSourceWithPushOMDataSource.class, "(|(scenario=writeDataHandler)(scenario=writeDataHandlerProvider))");
// TODO: need to evaluate if the test case is correct
Modified: webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java?rev=1481499&r1=1481498&r2=1481499&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java Sun May 12 09:17:04 2013
@@ -27,7 +27,6 @@ import org.apache.axiom.ts.om.builder.Te
import org.apache.axiom.ts.om.container.TestSerialize;
import org.apache.axiom.ts.om.document.TestClone;
import org.apache.axiom.ts.om.document.TestDigest;
-import org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithIncompleteDescendant;
import org.apache.axiom.ts.om.node.TestInsertSiblingAfterOnChild;
import org.apache.axiom.ts.om.node.TestInsertSiblingBeforeOnChild;
import org.apache.axiom.ts.om.sourcedelement.TestGetSAXSourceWithPushOMDataSource;
@@ -39,10 +38,6 @@ public class OMImplementationTest extend
builder.exclude(TestInsertSiblingAfterOnChild.class);
builder.exclude(TestInsertSiblingBeforeOnChild.class);
- // TODO: this is not supported yet
- builder.exclude(TestGetXMLStreamReaderWithIncompleteDescendant.class, "(cache=false)");
- builder.exclude(org.apache.axiom.ts.om.sourcedelement.TestSerialize.class, "(&(expand=partially)(serializationStrategy=XMLStreamReader)(cache=false)(serializeParent=true))");
-
// TODO: this case is not working because Axiom generates an XML declaration
// but uses another charset encoding to serialize the document
builder.exclude(TestSerialize.class, "(&(file=iso-8859-1.xml)(container=document))");