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/20 10:27:03 UTC
svn commit: r1484396 - in /webservices/axiom/trunk/modules:
axiom-api/src/main/java/org/apache/axiom/om/impl/builder/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/
axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/seria...
Author: veithen
Date: Mon May 20 08:27:03 2013
New Revision: 1484396
URL: http://svn.apache.org/r1484396
Log:
AXIOM-288: Handle lookahead and auto-close in a more consistent way.
Modified:
webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
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/AbstractWrapper.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java
webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java
Modified: webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXBuilder.java Mon May 20 08:27:03 2013
@@ -86,6 +86,12 @@ public abstract class StAXBuilder implem
protected String charEncoding = null;
+ /**
+ * Specifies whether the builder/parser should be automatically closed when the
+ * {@link XMLStreamConstants#END_DOCUMENT} event is reached.
+ */
+ boolean autoClose;
+
protected boolean _isClosed = false; // Indicate if parser is closed
// Fields for Custom Builder implementation
@@ -542,6 +548,9 @@ public abstract class StAXBuilder implem
*/
public XMLStreamReader disableCaching() {
cache = false;
+ // Always advance to the event right after the current node; this also takes
+ // care of lookahead
+ parserNext();
return parser;
}
@@ -580,6 +589,9 @@ public abstract class StAXBuilder implem
} else {
target = (OMContainerEx)((OMElement)container).getParent();
}
+ if (done && autoClose) {
+ close();
+ }
cache = true;
}
@@ -759,6 +771,14 @@ public abstract class StAXBuilder implem
return this.charEncoding;
}
+ /**
+ * For internal use only.
+ *
+ * @param autoClose
+ */
+ public void setAutoClose(boolean autoClose) {
+ this.autoClose = autoClose;
+ }
/**
* @return if parser is closed
Modified: webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java Mon May 20 08:27:03 2013
@@ -95,12 +95,6 @@ public class StAXOMBuilder extends StAXB
// on an OMElement is interned.
private boolean namespaceURIInterning = false;
- /**
- * Specifies whether the builder/parser should be automatically closed when the
- * {@link XMLStreamConstants#END_DOCUMENT} event is reached.
- */
- private boolean autoClose;
-
private int lookAheadToken = -1;
/**
@@ -659,15 +653,6 @@ public class StAXOMBuilder extends StAXB
}
/**
- * For internal use only.
- *
- * @param autoClose
- */
- public void setAutoClose(boolean autoClose) {
- this.autoClose = autoClose;
- }
-
- /**
* Pushes the virtual parser ahead one token.
* If a look ahead token was calculated it is returned.
* @return next token
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=1484396&r1=1484395&r2=1484396&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 Mon May 20 08:27:03 2013
@@ -50,14 +50,6 @@ public final class OMContainerHelper {
public static XMLStreamReader getXMLStreamReader(IContainer container, boolean cache, OMXMLStreamReaderConfiguration configuration) {
OMXMLParserWrapper builder = container.getBuilder();
- if (builder != null && builder instanceof StAXOMBuilder) {
- if (!container.isComplete()) {
- if (((StAXOMBuilder) builder).isLookahead()) {
- buildNext(container);
- }
- }
- }
-
if (builder != null && builder.isCompleted() && !cache && !container.isComplete()) {
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/AbstractWrapper.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/AbstractWrapper.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/AbstractWrapper.java Mon May 20 08:27:03 2013
@@ -122,16 +122,14 @@ abstract class AbstractWrapper extends P
}
final boolean doNext() throws XMLStreamException {
+ if (reader.getEventType() == XMLStreamReader.START_ELEMENT) {
+ depth++;
+ }
if (depth == 0) {
return false;
} else {
- switch (reader.next()) {
- case XMLStreamReader.START_ELEMENT:
- depth++;
- break;
- case XMLStreamReader.END_ELEMENT:
- depth--;
- break;
+ if (reader.next() == XMLStreamReader.END_ELEMENT) {
+ depth--;
}
return true;
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.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/IncludeWrapper.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/IncludeWrapper.java Mon May 20 08:27:03 2013
@@ -23,7 +23,7 @@ import javax.xml.stream.XMLStreamReader;
final class IncludeWrapper extends AbstractWrapper {
IncludeWrapper(PullSerializer serializer, XMLStreamReader parent) {
- super(serializer, parent, 1);
+ super(serializer, parent, 0);
}
void released() throws XMLStreamException {
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.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/Navigator.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java Mon May 20 08:27:03 2013
@@ -650,7 +650,6 @@ final class Navigator extends PullSerial
serializer.pushState(wrapper);
node = container;
visited = true;
- wrapper.next();
}
}
Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java?rev=1484396&r1=1484395&r2=1484396&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/push/Serializer.java Mon May 20 08:27:03 2013
@@ -286,11 +286,20 @@ public abstract class Serializer {
StAXOMBuilder builder = (StAXOMBuilder)container.getBuilder();
XMLStreamReader reader = builder.disableCaching();
DataHandlerReader dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(reader);
+ boolean first = true;
int depth = 0;
loop: while (true) {
- // We use the next() method on the builder instead of the XMLStreamReader
- // because this takes care of lookahead and autoClose.
- int event = builder.next();
+ int event;
+ if (first) {
+ event = reader.getEventType();
+ first = false;
+ } else {
+ try {
+ event = reader.next();
+ } catch (XMLStreamException ex) {
+ throw new DeferredParsingException(ex);
+ }
+ }
switch (event) {
case XMLStreamReader.START_ELEMENT:
depth++;