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/03/06 10:37:03 UTC
svn commit: r1733797 - in /webservices/axiom/trunk: ./
aspects/core-aspects/src/main/java/org/apache/axiom/core/
aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/
aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/
aspects...
Author: veithen
Date: Sun Mar 6 09:37:03 2016
New Revision: 1733797
URL: http://svn.apache.org/viewvc?rev=1733797&view=rev
Log:
Rewrite the getXMLStreamReader implementation using the new stream API.
Added:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NamespaceURIInterningFilterHandler.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NullXmlHandler.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/NullXmlHandler.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/InternalXMLStreamReader.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/InternalXMLStreamReader.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXExceptionUtil.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXExceptionUtil.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/StAXPivot.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/XMLStreamReaderExtensionFactory.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/stax/XMLStreamReaderExtensionFactory.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/AxiomXMLStreamReaderExtensionFactory.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/AxiomXMLStreamReaderExtensionFactory.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/CharacterDataReaderImpl.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/CharacterDataReaderImpl.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/DTDReaderImpl.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/DTDReaderImpl.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/DataHandlerReaderImpl.java
- copied unchanged from r1733796, webservices/axiom/branches/stax-stream/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/DataHandlerReaderImpl.java
Removed:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceURIInterningNamespaceContextWrapper.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceURIInterningXMLStreamReaderWrapper.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/
Modified:
webservices/axiom/trunk/ (props changed)
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Builder.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/InputContext.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/TreeWalkerImpl.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementSupport.aj
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreParentNodeSupport.aj
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlReader.java
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/SAXReader.java
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/Context.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushBuilder.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXOMBuilder.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/DirectPushOMDataSourceReader.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceReader.java
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
webservices/axiom/trunk/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
Propchange: webservices/axiom/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Sun Mar 6 09:37:03 2016
@@ -14,3 +14,4 @@
/webservices/axiom/branches/maven-site-plugin-3.5:1731125-1732708
/webservices/axiom/branches/namespaceURIInterning:1293148-1293587
/webservices/axiom/branches/osgi-redesign:1180368-1180596
+/webservices/axiom/branches/stax-stream:1733528-1733796
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Builder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Builder.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Builder.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Builder.java Sun Mar 6 09:37:03 2016
@@ -18,26 +18,11 @@
*/
package org.apache.axiom.core;
-import javax.xml.stream.XMLStreamReader;
-
public interface Builder {
int next();
boolean isCompleted();
void close();
boolean isClosed();
- /**
- * Get the value of a feature/property from the underlying XMLStreamReader implementation
- * without accessing the XMLStreamReader. https://issues.apache.org/jira/browse/AXIOM-348
- *
- * @param name
- * @return TODO
- */
- Object getReaderProperty(String name) throws IllegalArgumentException;
-
- XMLStreamReader disableCaching();
-
- void reenableCaching(CoreParentNode container);
-
void discard(CoreParentNode container);
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/InputContext.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/InputContext.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/InputContext.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/InputContext.java Sun Mar 6 09:37:03 2016
@@ -34,4 +34,6 @@ public interface InputContext {
* if a pass-through handler has already been set for this context
*/
void setPassThroughHandler(XmlHandler passThroughHandler);
+
+ void discard();
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/TreeWalkerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/TreeWalkerImpl.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/TreeWalkerImpl.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/TreeWalkerImpl.java Sun Mar 6 09:37:03 2016
@@ -25,6 +25,7 @@ import org.apache.axiom.core.CoreModelSt
import org.apache.axiom.core.CoreNSAwareElement;
import org.apache.axiom.core.CoreNode;
import org.apache.axiom.core.CoreParentNode;
+import org.apache.axiom.core.InputContext;
import org.apache.axiom.core.NodeConsumedException;
import org.apache.axiom.core.stream.DocumentElementExtractingFilterHandler;
import org.apache.axiom.core.stream.StreamException;
@@ -79,6 +80,7 @@ public final class TreeWalkerImpl implem
private final XmlHandler handler;
private final CoreParentNode root;
private final boolean preserve;
+ private final boolean incremental;
private CoreNode node;
/**
@@ -89,10 +91,11 @@ public final class TreeWalkerImpl implem
private int state = STATE_NONE;
- public TreeWalkerImpl(XmlHandler handler, CoreParentNode root, boolean preserve) {
+ public TreeWalkerImpl(XmlHandler handler, CoreParentNode root, boolean preserve, boolean incremental) {
this.handler = handler;
this.root = root;
this.preserve = preserve;
+ this.incremental = incremental;
}
@Override
@@ -206,7 +209,7 @@ public final class TreeWalkerImpl implem
// been visited yet. It may be a sourced element or a leaf node
if (state == STATE_NOT_VISITED) {
if (nextNode instanceof CoreNSAwareElement) {
- XmlInput input = ((CoreNSAwareElement)nextNode).getXmlInput(preserve);
+ XmlInput input = ((CoreNSAwareElement)nextNode).getXmlInput(preserve, incremental);
if (input != null) {
reader = input.createReader(new DocumentElementExtractingFilterHandler(handler));
state = STATE_STREAMING;
@@ -264,4 +267,24 @@ public final class TreeWalkerImpl implem
throw new CoreModelStreamException(ex);
}
}
+
+ @Override
+ public void dispose() {
+ if (!preserve && node != null) {
+ CoreParentNode parent = node instanceof CoreParentNode ? (CoreParentNode)node : ((CoreChildNode)node).coreGetParent();
+ while (true) {
+ InputContext context = parent.coreGetInputContext();
+ if (context != null) {
+ context.discard();
+ }
+ if (parent == root) {
+ break;
+ }
+ parent = ((CoreChildNode)parent).coreGetParent();
+ }
+ }
+ if (reader != null) {
+ reader.dispose();
+ }
+ }
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementSupport.aj?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementSupport.aj Sun Mar 6 09:37:03 2016
@@ -38,7 +38,7 @@ public aspect CoreNSAwareElementSupport
return namespaceURI.equals(coreGetNamespaceURI()) ? coreGetPrefix() : null;
}
- public XmlInput CoreNSAwareElement.getXmlInput(boolean cache) throws StreamException {
+ public XmlInput CoreNSAwareElement.getXmlInput(boolean cache, boolean incremental) throws StreamException {
return null;
}
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=1733797&r1=1733796&r2=1733797&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 Sun Mar 6 09:37:03 2016
@@ -371,9 +371,13 @@ public aspect CoreParentNodeSupport {
throw new UnsupportedOperationException();
}
+ public final XmlReader CoreParentNode.coreGetReader(XmlHandler handler, boolean cache, boolean incremental) {
+ return new TreeWalkerImpl(handler, this, cache, incremental);
+ }
+
public void CoreParentNode.internalSerialize(XmlHandler handler, boolean cache) throws CoreModelException, StreamException {
try {
- XmlReader reader = new TreeWalkerImpl(handler, this, cache);
+ XmlReader reader = coreGetReader(handler, cache, false);
while (!reader.proceed()) {
// Just loop
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlReader.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlReader.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/XmlReader.java Sun Mar 6 09:37:03 2016
@@ -20,4 +20,5 @@ package org.apache.axiom.core.stream;
public interface XmlReader {
boolean proceed() throws StreamException;
+ void dispose();
}
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/SAXReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/SAXReader.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/SAXReader.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/stream/sax/SAXReader.java Sun Mar 6 09:37:03 2016
@@ -65,4 +65,8 @@ public final class SAXReader implements
}
return true;
}
+
+ @Override
+ public void dispose() {
+ }
}
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=1733797&r1=1733796&r2=1733797&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 Sun Mar 6 09:37:03 2016
@@ -39,6 +39,7 @@ public final class BuilderHandler implem
final Builder builder;
final OMNamespaceCache nsCache = new OMNamespaceCache();
public Context context;
+ private int activeContextCount;
// returns the state of completion
public boolean done;
// keeps the state of the cache
@@ -61,6 +62,7 @@ public final class BuilderHandler implem
this.root = root;
this.builder = builder;
context = new Context(this, null, 0);
+ activeContextCount = 1;
}
public void addListener(BuilderListener listener) {
@@ -93,6 +95,16 @@ public final class BuilderHandler implem
}
}
+ void incrementActiveContextCount() {
+ activeContextCount++;
+ }
+
+ void decrementActiveContextCount() {
+ if (--activeContextCount == 0) {
+ builder.close();
+ }
+ }
+
public boolean isCompleted() {
return done;
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/Context.java Sun Mar 6 09:37:03 2016
@@ -24,6 +24,7 @@ import org.apache.axiom.core.CoreCharact
import org.apache.axiom.core.CoreChildNode;
import org.apache.axiom.core.CoreParentNode;
import org.apache.axiom.core.InputContext;
+import org.apache.axiom.core.stream.NullXmlHandler;
import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
import org.apache.axiom.om.OMNamespace;
@@ -79,14 +80,25 @@ public final class Context implements In
}
target.coreSetState(CoreParentNode.DISCARDED);
this.passThroughHandler = passThroughHandler;
+ if (passThroughHandler == NullXmlHandler.INSTANCE) {
+ builderHandler.decrementActiveContextCount();
+ }
}
+ @Override
+ public void discard() {
+ target.coreSetState(CoreParentNode.DISCARDED);
+ passThroughHandler = NullXmlHandler.INSTANCE;
+ builderHandler.decrementActiveContextCount();
+ }
+
private Context newContext(CoreParentNode target) {
if (nestedContext == null) {
nestedContext = new Context(builderHandler, this, depth+1);
}
nestedContext.target = target;
target.coreSetInputContext(nestedContext);
+ builderHandler.incrementActiveContextCount();
return nestedContext;
}
@@ -98,11 +110,15 @@ public final class Context implements In
pendingCharacterData = null;
}
target = null;
+ builderHandler.decrementActiveContextCount();
return parentContext;
}
private Context decrementPassThroughDepth() {
if (passThroughDepth == 0) {
+ if (passThroughHandler != NullXmlHandler.INSTANCE) {
+ builderHandler.decrementActiveContextCount();
+ }
target.coreSetInputContext(null);
target.coreSetState(CoreParentNode.DISCARDED);
passThroughHandler = null;
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushBuilder.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushBuilder.java Sun Mar 6 09:37:03 2016
@@ -18,8 +18,6 @@
*/
package org.apache.axiom.om.impl.common.builder;
-import javax.xml.stream.XMLStreamReader;
-
import org.apache.axiom.core.CoreParentNode;
import org.apache.axiom.core.NodeFactory;
import org.apache.axiom.core.stream.StreamException;
@@ -97,16 +95,6 @@ public final class PushBuilder extends A
}
@Override
- public final XMLStreamReader disableCaching() {
- throw new UnsupportedOperationException();
- }
-
- @Override
- public final void reenableCaching(CoreParentNode container) {
- throw new UnsupportedOperationException();
- }
-
- @Override
public final void discard(CoreParentNode container) {
throw new UnsupportedOperationException();
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/StAXHelper.java Sun Mar 6 09:37:03 2016
@@ -392,4 +392,9 @@ public class StAXHelper implements XmlRe
}
return lookAheadToken;
}
+
+ @Override
+ public void dispose() {
+ close();
+ }
}
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=1733797&r1=1733796&r2=1733797&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 Sun Mar 6 09:37:03 2016
@@ -30,8 +30,6 @@ import org.apache.axiom.om.impl.builder.
import org.apache.axiom.om.impl.intf.AxiomContainer;
import org.apache.axiom.om.impl.intf.AxiomElement;
import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
@@ -39,8 +37,6 @@ import javax.xml.stream.XMLStreamReader;
import java.io.Closeable;
public class StAXOMBuilder extends AbstractBuilder implements CustomBuilderSupport {
- private static final Log log = LogFactory.getLog(StAXOMBuilder.class);
-
private final StAXHelper helper;
private final Detachable detachable;
@@ -173,58 +169,6 @@ public class StAXOMBuilder extends Abstr
return helper.parser.getPrefix();
}
- public final XMLStreamReader disableCaching() {
- builderHandler.cache = false;
- // Always advance to the event right after the current node; this also takes
- // care of lookahead
- helper.parserNext();
- if (log.isDebugEnabled()) {
- log.debug("Caching disabled; current element level is " + builderHandler.depth);
- }
- return helper.parser;
- }
-
- // This method expects that the parser is currently positioned on the
- // end event corresponding to the container passed as parameter
- public final void reenableCaching(CoreParentNode container) {
- Context current = builderHandler.context;
- while (true) {
- discarded(current.target);
- if (builderHandler.depth == 0) {
- if (current.target != container || current.target != builderHandler.document) {
- throw new IllegalStateException();
- }
- break;
- }
- builderHandler.depth--;
- if (current.target == container) {
- break;
- }
- current = current.parentContext;
- }
- // Note that at this point current == container
- if (container == builderHandler.document) {
- builderHandler.context = null;
- builderHandler.done = true;
- } else if (builderHandler.depth == 0 && builderHandler.document == null) {
- // Consume the remaining event; for the rationale, see StAXOMBuilder#next()
- while (helper.parserNext() != XMLStreamConstants.END_DOCUMENT) {
- // Just loop
- }
- builderHandler.context = null;
- builderHandler.done = true;
- } else {
- builderHandler.context = builderHandler.context.parentContext;
- }
- if (log.isDebugEnabled()) {
- log.debug("Caching re-enabled; new element level: " + builderHandler.depth + "; done=" + builderHandler.done);
- }
- if (builderHandler.done && helper.autoClose) {
- close();
- }
- builderHandler.cache = true;
- }
-
@Override
public void registerCustomBuilder(Selector selector, CustomBuilder customBuilder) {
if (customBuilderManager == null) {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerSupport.aj Sun Mar 6 09:37:03 2016
@@ -38,13 +38,16 @@ import org.apache.axiom.core.CoreNode;
import org.apache.axiom.core.ElementMatcher;
import org.apache.axiom.core.Mapper;
import org.apache.axiom.core.stream.NamespaceRepairingFilterHandler;
+import org.apache.axiom.core.stream.NamespaceURIInterningFilterHandler;
import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
import org.apache.axiom.core.stream.sax.XmlHandlerContentHandler;
+import org.apache.axiom.core.stream.stax.StAXPivot;
import org.apache.axiom.core.stream.stax.XMLStreamWriterNamespaceContextProvider;
import org.apache.axiom.om.NodeUnavailableException;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
+import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.OMSerializable;
@@ -54,10 +57,9 @@ import org.apache.axiom.om.OMXMLStreamRe
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
import org.apache.axiom.om.impl.common.AxiomExceptionTranslator;
import org.apache.axiom.om.impl.common.AxiomSemantics;
-import org.apache.axiom.om.impl.common.NamespaceURIInterningXMLStreamReaderWrapper;
import org.apache.axiom.om.impl.common.OMChildrenQNameIterator;
import org.apache.axiom.om.impl.common.SAXResultContentHandler;
-import org.apache.axiom.om.impl.common.serializer.pull.PullSerializer;
+import org.apache.axiom.om.impl.common.serializer.push.NamespaceContextPreservationFilterHandler;
import org.apache.axiom.om.impl.common.serializer.push.XmlDeclarationRewriterHandler;
import org.apache.axiom.om.impl.common.serializer.push.XsiTypeFilterHandler;
import org.apache.axiom.om.impl.common.serializer.push.sax.XMLReaderImpl;
@@ -65,8 +67,8 @@ import org.apache.axiom.om.impl.common.s
import org.apache.axiom.om.impl.intf.AxiomChildNode;
import org.apache.axiom.om.impl.intf.AxiomContainer;
import org.apache.axiom.om.impl.intf.OMFactoryEx;
+import org.apache.axiom.om.impl.stream.stax.AxiomXMLStreamReaderExtensionFactory;
import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.util.stax.debug.XMLStreamReaderValidator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;
@@ -101,27 +103,28 @@ public aspect AxiomContainerSupport {
}
public final XMLStreamReader AxiomContainer.defaultGetXMLStreamReader(boolean cache, OMXMLStreamReaderConfiguration configuration) {
- Builder builder = coreGetBuilder();
- if (builder != null && builder.isCompleted() && !cache && !isComplete()) {
- throw new UnsupportedOperationException("The parser is already consumed!");
- }
- XMLStreamReader reader = new PullSerializer(this, cache, configuration.isPreserveNamespaceContext());
-
+ StAXPivot pivot = new StAXPivot(AxiomXMLStreamReaderExtensionFactory.INSTANCE);
+ XmlHandler handler = pivot;
if (configuration.isNamespaceURIInterning()) {
- reader = new NamespaceURIInterningXMLStreamReaderWrapper(reader);
+ handler = new NamespaceURIInterningFilterHandler(handler);
+ }
+ CoreElement contextElement = getContextElement();
+ if (contextElement != null) {
+ if (configuration.isPreserveNamespaceContext()) {
+ handler = new NamespaceContextPreservationFilterHandler(handler, contextElement);
+ } else {
+ for (Iterator<OMNamespace> it = ((OMElement)contextElement).getNamespacesInScope(); it.hasNext(); ) {
+ OMNamespace ns = it.next();
+ pivot.setPrefix(ns.getPrefix(), ns.getNamespaceURI());
+ }
+ }
}
-
- // If debug is enabled, wrap the OMXMLStreamReader in a validator.
- // The validator will check for mismatched events to help determine if the OMStAXWrapper
- // is functioning correctly. All problems are reported as debug.log messages
-
- if (log.isDebugEnabled()) {
- reader =
- new XMLStreamReaderValidator(reader, // delegate to actual reader
- false); // log problems (true will cause exceptions to be thrown)
+ try {
+ pivot.setReader(coreGetReader(handler, cache, true));
+ } catch (StreamException ex) {
+ throw new OMException(ex);
}
-
- return reader;
+ return pivot;
}
public final AxiomChildNode AxiomContainer.prepareNewChild(OMNode omNode) {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/mixin/AxiomSourcedElementSupport.aj Sun Mar 6 09:37:03 2016
@@ -403,13 +403,25 @@ public aspect AxiomSourcedElementSupport
}
}
- public final XmlInput AxiomSourcedElement.getXmlInput(boolean cache) throws StreamException {
- if (isExpanded() || (cache && OMDataSourceUtil.isDestructiveWrite(dataSource))) {
+ public final XmlInput AxiomSourcedElement.getXmlInput(boolean cache, boolean incremental) throws StreamException {
+ if (isExpanded()) {
return null;
}
- // Note: if we can't determine the type (push/pull) of the OMDataSource, we
- // default to push
+ boolean pull;
if (OMDataSourceUtil.isPullDataSource(dataSource)) {
+ pull = true;
+ } else if (OMDataSourceUtil.isPushDataSource(dataSource)) {
+ if (incremental) {
+ return null;
+ }
+ pull = false;
+ } else {
+ pull = incremental;
+ }
+ if (cache && (pull && OMDataSourceUtil.isDestructiveRead(dataSource) || !pull && OMDataSourceUtil.isDestructiveWrite(dataSource))) {
+ return null;
+ }
+ if (pull) {
try {
return new StAXPullInput(dataSource.getReader());
} catch (XMLStreamException ex) {
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/DirectPushOMDataSourceReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/DirectPushOMDataSourceReader.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/DirectPushOMDataSourceReader.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/DirectPushOMDataSourceReader.java Sun Mar 6 09:37:03 2016
@@ -43,4 +43,8 @@ final class DirectPushOMDataSourceReader
}
return true;
}
+
+ @Override
+ public void dispose() {
+ }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceReader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceReader.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceReader.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceReader.java Sun Mar 6 09:37:03 2016
@@ -62,4 +62,8 @@ final class PushOMDataSourceReader imple
}
return true;
}
+
+ @Override
+ public void dispose() {
+ }
}
Modified: webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/OMImplementationTest.java Sun Mar 6 09:37:03 2016
@@ -25,7 +25,6 @@ import org.apache.axiom.om.impl.dom.fact
import org.apache.axiom.ts.om.OMTestSuiteBuilder;
import org.apache.axiom.ts.om.document.TestDigest;
import org.apache.axiom.ts.om.element.TestGetChildrenWithName4;
-import org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithPreserveNamespaceContext;
import org.apache.axiom.ts.om.element.sr.TestClose;
import org.apache.axiom.ts.om.node.TestInsertSiblingAfterOnChild;
import org.apache.axiom.ts.om.node.TestInsertSiblingBeforeOnChild;
@@ -51,9 +50,6 @@ public class OMImplementationTest extend
// TODO: test case needing review
builder.exclude(TestClose.class);
- // TODO: the namespace context is different when cache=false
- builder.exclude(TestGetXMLStreamReaderWithPreserveNamespaceContext.class, "(cache=false)");
-
return builder.build();
}
}
Modified: webservices/axiom/trunk/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java?rev=1733797&r1=1733796&r2=1733797&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/test/java/org/apache/axiom/om/impl/llom/OMImplementationTest.java Sun Mar 6 09:37:03 2016
@@ -24,7 +24,6 @@ import junit.framework.TestSuite;
import org.apache.axiom.om.impl.llom.factory.OMLinkedListMetaFactory;
import org.apache.axiom.ts.om.OMTestSuiteBuilder;
import org.apache.axiom.ts.om.document.TestDigest;
-import org.apache.axiom.ts.om.element.TestGetXMLStreamReaderWithPreserveNamespaceContext;
import org.apache.axiom.ts.om.element.sr.TestClose;
import org.apache.axiom.ts.om.node.TestInsertSiblingAfterOnChild;
import org.apache.axiom.ts.om.node.TestInsertSiblingBeforeOnChild;
@@ -46,9 +45,6 @@ public class OMImplementationTest extend
// TODO: test case needing review
builder.exclude(TestClose.class);
- // TODO: the namespace context is different when cache=false
- builder.exclude(TestGetXMLStreamReaderWithPreserveNamespaceContext.class, "(cache=false)");
-
return builder.build();
}
}