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/04 22:05:41 UTC
svn commit: r1728553 - in
/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl:
common/ common/builder/ mixin/
Author: veithen
Date: Thu Feb 4 21:05:41 2016
New Revision: 1728553
URL: http://svn.apache.org/viewvc?rev=1728553&view=rev
Log:
Extract class from StAXOMBuilder to enable code sharing with PushOMBuilder (and later SAXOMBuilder).
Added:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java (with props)
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java
- copied, changed from r1728372, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/PushOMBuilder.java
Removed:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/PushOMBuilder.java
Modified:
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/AxiomSourcedElementSupport.aj
Added: 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=1728553&view=auto
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java (added)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java Thu Feb 4 21:05:41 2016
@@ -0,0 +1,93 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.om.impl.common.builder;
+
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import org.apache.axiom.core.NodeFactory;
+import org.apache.axiom.om.OMContainer;
+import org.apache.axiom.om.OMSerializable;
+import org.apache.axiom.om.impl.common.AxiomSemantics;
+import org.apache.axiom.om.impl.intf.AxiomChildNode;
+import org.apache.axiom.om.impl.intf.AxiomComment;
+import org.apache.axiom.om.impl.intf.AxiomContainer;
+import org.apache.axiom.om.impl.intf.AxiomDocument;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public final class BuilderHandler {
+ private static final Log log = LogFactory.getLog(BuilderHandler.class);
+
+ public final NodeFactory nodeFactory;
+ public final Model model;
+ public AxiomContainer target;
+ // returns the state of completion
+ public boolean done;
+ // keeps the state of the cache
+ public boolean cache = true;
+ public AxiomDocument document;
+
+ /**
+ * Tracks the depth of the node identified by {@link #target}. By definition, the level of the
+ * root element is defined as 1. Note that if caching is disabled, then this depth may be
+ * different from the actual depth reached by the underlying parser.
+ */
+ public int elementLevel;
+
+ /**
+ * 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.
+ */
+ public Map<OMContainer,Throwable> discardTracker = log.isDebugEnabled() ? new LinkedHashMap<OMContainer,Throwable>() : null;
+
+ private ArrayList<NodePostProcessor> nodePostProcessors;
+
+ public BuilderHandler(NodeFactory nodeFactory, Model model) {
+ this.nodeFactory = nodeFactory;
+ this.model = model;
+ }
+
+ public void addNodePostProcessor(NodePostProcessor nodePostProcessor) {
+ if (nodePostProcessors == null) {
+ nodePostProcessors = new ArrayList<NodePostProcessor>();
+ }
+ nodePostProcessors.add(nodePostProcessor);
+ }
+
+ public void postProcessNode(OMSerializable node) {
+ if (nodePostProcessors != null) {
+ for (int i=0, size=nodePostProcessors.size(); i<size; i++) {
+ nodePostProcessors.get(i).postProcessNode(node);
+ }
+ }
+ }
+
+ private void addChild(AxiomChildNode node) {
+ target.addChild(node, true);
+ postProcessNode(node);
+ }
+
+ public void createComment(String content) {
+ AxiomComment node = nodeFactory.createNode(AxiomComment.class);
+ node.coreSetCharacterData(content, AxiomSemantics.INSTANCE);
+ addChild(node);
+ }
+}
Propchange: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/BuilderHandler.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java (from r1728372, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/PushOMBuilder.java)
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java?p2=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java&p1=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/PushOMBuilder.java&r1=1728372&r2=1728553&rev=1728553&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/PushOMBuilder.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/builder/PushOMBuilder.java Thu Feb 4 21:05:41 2016
@@ -16,7 +16,7 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.om.impl.common;
+package org.apache.axiom.om.impl.common.builder;
import java.io.IOException;
import java.util.Iterator;
@@ -41,10 +41,11 @@ import org.apache.axiom.util.stax.Abstra
public class PushOMBuilder extends AbstractXMLStreamWriter implements DataHandlerWriter {
private final AxiomSourcedElement root;
private final OMFactoryEx factory;
- private OMElement parent;
-
+ private final BuilderHandler handler;
+
public PushOMBuilder(AxiomSourcedElement root) throws XMLStreamException {
this.root = root;
+ handler = new BuilderHandler(root.coreGetNodeFactory(), PlainXMLModel.INSTANCE);
factory = (OMFactoryEx)root.getOMFactory();
// Seed the namespace context with the namespace context from the parent
OMContainer parent = root.getParent();
@@ -94,9 +95,9 @@ public class PushOMBuilder extends Abstr
if (!isDecl && namespaceURI.length() == 0) {
return null;
} else {
- if (parent != null) {
+ if (handler.target != null) {
// If possible, locate an existing OMNamespace object
- OMNamespace ns = parent.findNamespaceURI(prefix);
+ OMNamespace ns = ((OMElement)handler.target).findNamespaceURI(prefix);
if (ns != null && ns.getNamespaceURI().equals(namespaceURI)) {
return ns;
}
@@ -108,16 +109,16 @@ public class PushOMBuilder extends Abstr
protected void doWriteStartElement(String prefix, String localName, String namespaceURI) {
// Get the OMNamespace object before we change the parent
OMNamespace ns = getOMNamespace(prefix, namespaceURI, false);
- if (parent == null) {
+ if (handler.target == null) {
root.validateName(prefix, localName, namespaceURI);
- parent = root;
+ handler.target = root;
} else {
// We use the createOMElement variant that takes a OMXMLParserWrapper parameter and
// don't pass the namespace. This avoids creation of a namespace declaration.
- parent = factory.createAxiomElement(AxiomElement.class, localName, parent, null);
+ handler.target = factory.createAxiomElement(AxiomElement.class, localName, handler.target, null);
}
if (ns != null) {
- parent.setNamespace(ns, false);
+ ((OMElement)handler.target).setNamespace(ns, false);
}
}
@@ -126,13 +127,13 @@ public class PushOMBuilder extends Abstr
}
protected void doWriteEndElement() {
- if (parent == root) {
- parent = null;
+ if (handler.target == root) {
+ handler.target = null;
} else {
// Since we use the createOMElement variant that takes a OMXMLParserWrapper parameter,
// we need to update the completion status.
- ((AxiomContainer)parent).setComplete(true);
- parent = (OMElement)parent.getParent();
+ handler.target.setComplete(true);
+ handler.target = (AxiomContainer)((OMElement)handler.target).getParent();
}
}
@@ -150,7 +151,7 @@ public class PushOMBuilder extends Abstr
// Use the internal appendAttribute method instead of addAttribute in order to avoid
// automatic of a namespace declaration (the OMDataSource is required to produce well formed
// XML with respect to namespaces, so it will take care of the namespace declarations).
- ((AxiomElement)parent).internalAppendAttribute(attr);
+ ((AxiomElement)handler.target).internalAppendAttribute(attr);
}
protected void doWriteAttribute(String localName, String value) throws XMLStreamException {
@@ -158,7 +159,7 @@ public class PushOMBuilder extends Abstr
}
protected void doWriteNamespace(String prefix, String namespaceURI) {
- ((AxiomElement)parent).addNamespaceDeclaration(getOMNamespace(prefix, namespaceURI, true));
+ ((AxiomElement)handler.target).addNamespaceDeclaration(getOMNamespace(prefix, namespaceURI, true));
}
protected void doWriteDefaultNamespace(String namespaceURI) {
@@ -170,23 +171,23 @@ public class PushOMBuilder extends Abstr
}
protected void doWriteCharacters(String text) {
- factory.createOMText(parent, text, OMNode.TEXT_NODE, true);
+ factory.createOMText(handler.target, text, OMNode.TEXT_NODE, true);
}
protected void doWriteCData(String data) {
- factory.createOMText(parent, data, OMNode.CDATA_SECTION_NODE, true);
+ factory.createOMText(handler.target, data, OMNode.CDATA_SECTION_NODE, true);
}
protected void doWriteComment(String data) {
- factory.createOMComment(parent, data, true);
+ handler.createComment(data);
}
protected void doWriteEntityRef(String name) throws XMLStreamException {
- factory.createOMEntityReference(parent, name, null, true);
+ factory.createOMEntityReference(handler.target, name, null, true);
}
- protected void doWriteProcessingInstruction(String target, String data) {
- factory.createOMProcessingInstruction(parent, target, data, true);
+ protected void doWriteProcessingInstruction(String piTarget, String data) {
+ factory.createOMProcessingInstruction(handler.target, piTarget, data, true);
}
protected void doWriteProcessingInstruction(String target) {
@@ -207,11 +208,11 @@ public class PushOMBuilder extends Abstr
if (contentID != null) {
child.setContentID(contentID);
}
- parent.addChild(child);
+ handler.target.addChild(child);
}
public void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID,
boolean optimize) throws IOException, XMLStreamException {
- parent.addChild(factory.createOMText(contentID, dataHandlerProvider, optimize));
+ handler.target.addChild(factory.createOMText(contentID, dataHandlerProvider, optimize));
}
}
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=1728553&r1=1728552&r2=1728553&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 Thu Feb 4 21:05:41 2016
@@ -32,14 +32,12 @@ import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.OMNode;
-import org.apache.axiom.om.OMSerializable;
import org.apache.axiom.om.OMText;
import org.apache.axiom.om.impl.builder.Builder;
import org.apache.axiom.om.impl.builder.CustomBuilder;
import org.apache.axiom.om.impl.builder.CustomBuilderSupport;
import org.apache.axiom.om.impl.builder.Detachable;
import org.apache.axiom.om.impl.intf.AxiomContainer;
-import org.apache.axiom.om.impl.intf.AxiomDocument;
import org.apache.axiom.om.impl.intf.AxiomElement;
import org.apache.axiom.om.impl.intf.OMFactoryEx;
import org.apache.axiom.util.stax.XMLEventUtils;
@@ -56,9 +54,6 @@ import javax.xml.namespace.QName;
import javax.xml.stream.Location;
import java.io.Closeable;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.Map;
/**
* Internal implementation class.
@@ -98,35 +93,17 @@ public class StAXOMBuilder implements Bu
/** Field parser */
private XMLStreamReader parser;
- private final NodeFactory nodeFactory;
-
// TODO: this will eventually disappear in favor of NodeFactory
private final OMFactoryEx omfactory;
private final Detachable detachable;
private final Closeable closeable;
- private final Model model;
-
- /** Field lastNode */
- private AxiomContainer target;
-
- // returns the state of completion
-
- /** Field done */
- private boolean done = false;
-
- // keeps the state of the cache
-
- /** Field cache */
- private boolean cache = true;
-
+
// keeps the state of the parser access. if the parser is
// accessed atleast once,this flag will be set
/** Field parserAccessed */
private boolean parserAccessed = false;
- private AxiomDocument document;
-
private String charEncoding = null;
/**
@@ -150,24 +127,11 @@ public class StAXOMBuilder implements Bu
private DataHandlerReader dataHandlerReader;
/**
- * Tracks the depth of the node identified by {@link #target}. By definition, the level of the
- * root element is defined as 1. Note that if caching is disabled, then this depth may be
- * different from the actual depth reached by the underlying parser.
- */
- private int elementLevel = 0;
-
- /**
* Stores exceptions thrown by the parser. Used to avoid accessing the parser
* again after is has thrown a parse exception.
*/
private Exception parserException;
- /**
- * 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.
- */
- private final Map<OMContainer,Throwable> discardTracker = log.isDebugEnabled() ? new LinkedHashMap<OMContainer,Throwable>() : null;
-
// namespaceURI interning
// default is false because most XMLStreamReader implementations don't do interning
// due to performance impacts. Thus a customer should not assume that a namespace
@@ -176,17 +140,16 @@ public class StAXOMBuilder implements Bu
private int lookAheadToken = -1;
- private ArrayList<NodePostProcessor> nodePostProcessors;
-
+ private final BuilderHandler handler;
+
private StAXOMBuilder(NodeFactory nodeFactory, OMFactory omFactory, XMLStreamReader parser, String encoding,
boolean autoClose, Detachable detachable, Closeable closeable, Model model, PayloadSelector payloadSelector) {
- this.nodeFactory = nodeFactory;
+ handler = new BuilderHandler(nodeFactory, model);
omfactory = (OMFactoryEx)omFactory;
this.parser = parser;
this.autoClose = autoClose;
this.detachable = detachable;
this.closeable = closeable;
- this.model = model;
this.payloadSelector = payloadSelector;
charEncoding = encoding;
dataHandlerReader = XMLStreamReaderUtils.getDataHandlerReader(parser);
@@ -210,8 +173,8 @@ public class StAXOMBuilder implements Bu
String characterEncoding) {
// Use this constructor because the parser is passed the START_DOCUMENT state.
this(nodeFactory, factory, parser, characterEncoding, true, null, null, PlainXMLModel.INSTANCE, PayloadSelector.DEFAULT);
- elementLevel = 1;
- target = (AxiomContainer)element;
+ handler.elementLevel = 1;
+ handler.target = (AxiomContainer)element;
populateOMElement(element);
}
@@ -267,7 +230,7 @@ public class StAXOMBuilder implements Bu
throw new OMException(ex);
}
}
- OMText text = omfactory.createOMText(target, dataHandlerObject, dataHandlerReader.isOptimized(), true);
+ OMText text = omfactory.createOMText(handler.target, dataHandlerObject, dataHandlerReader.isOptimized(), true);
String contentID = dataHandlerReader.getContentID();
if (contentID != null) {
text.setContentID(contentID);
@@ -283,20 +246,20 @@ public class StAXOMBuilder implements Bu
parserException = ex;
throw ex;
}
- return omfactory.createOMText(target, text, textType, true);
+ return omfactory.createOMText(handler.target, text, textType, true);
}
}
private void discarded(AxiomContainer container) {
container.discarded();
- if (discardTracker != null) {
- discardTracker.put(container, new Throwable());
+ if (handler.discardTracker != null) {
+ handler.discardTracker.put(container, new Throwable());
}
}
public final void debugDiscarded(Object container) {
- if (log.isDebugEnabled() && discardTracker != null) {
- Throwable t = discardTracker.get(container);
+ if (log.isDebugEnabled() && handler.discardTracker != null) {
+ Throwable t = handler.discardTracker.get(container);
if (t != null) {
log.debug("About to throw NodeUnavailableException. Location of the code that caused the node to be discarded/consumed:", t);
}
@@ -310,15 +273,15 @@ public class StAXOMBuilder implements Bu
}
public final void discard(OMContainer container) {
- int targetElementLevel = elementLevel;
- AxiomContainer current = target;
+ int targetElementLevel = handler.elementLevel;
+ AxiomContainer current = handler.target;
while (current != container) {
targetElementLevel--;
current = (AxiomContainer)((OMElement)current).getParent();
}
- if (targetElementLevel == 0 || targetElementLevel == 1 && document == null) {
+ if (targetElementLevel == 0 || targetElementLevel == 1 && handler.document == null) {
close();
- current = target;
+ current = handler.target;
while (true) {
discarded(current);
if (current == container) {
@@ -338,25 +301,25 @@ public class StAXOMBuilder implements Bu
if (skipDepth > 0) {
skipDepth--;
} else {
- discarded(target);
- boolean found = container == target;
- target = (AxiomContainer)((OMElement)target).getParent();
- elementLevel--;
+ discarded(handler.target);
+ boolean found = container == handler.target;
+ handler.target = (AxiomContainer)((OMElement)handler.target).getParent();
+ handler.elementLevel--;
if (found) {
break loop;
}
}
break;
case XMLStreamReader.END_DOCUMENT:
- if (skipDepth != 0 || elementLevel != 0) {
+ if (skipDepth != 0 || handler.elementLevel != 0) {
throw new OMException("Unexpected END_DOCUMENT");
}
- if (target != document) {
+ if (handler.target != handler.document) {
throw new OMException("Called discard for an element that is not being built by this builder");
}
- discarded(target);
- target = null;
- done = true;
+ discarded(handler.target);
+ handler.target = null;
+ handler.done = true;
break loop;
}
}
@@ -376,14 +339,14 @@ public class StAXOMBuilder implements Bu
throw new UnsupportedOperationException(
"parser accessed. cannot set cache");
}
- cache = b;
+ handler.cache = b;
}
/**
* @return true if caching
*/
public final boolean isCache() {
- return cache;
+ return handler.cache;
}
public final String getLocalName() {
@@ -418,19 +381,19 @@ public class StAXOMBuilder implements Bu
throw new IllegalStateException(
"Parser already accessed!");
}
- if (!cache) {
+ if (!handler.cache) {
parserAccessed = true;
// Mark all containers in the hierarchy as discarded because they can no longer be built
- AxiomContainer current = target;
- while (elementLevel > 0) {
+ AxiomContainer current = handler.target;
+ while (handler.elementLevel > 0) {
discarded(current);
current = (AxiomContainer)((OMElement)current).getParent();
- elementLevel--;
+ handler.elementLevel--;
}
- if (current != null && current == document) {
+ if (current != null && current == handler.document) {
discarded(current);
}
- target = null;
+ handler.target = null;
return parser;
} else {
throw new IllegalStateException(
@@ -439,12 +402,12 @@ public class StAXOMBuilder implements Bu
}
public final XMLStreamReader disableCaching() {
- cache = false;
+ handler.cache = false;
// Always advance to the event right after the current node; this also takes
// care of lookahead
parserNext();
if (log.isDebugEnabled()) {
- log.debug("Caching disabled; current element level is " + elementLevel);
+ log.debug("Caching disabled; current element level is " + handler.elementLevel);
}
return parser;
}
@@ -452,42 +415,42 @@ public class StAXOMBuilder implements Bu
// This method expects that the parser is currently positioned on the
// end event corresponding to the container passed as parameter
public final void reenableCaching(OMContainer container) {
- AxiomContainer current = target;
+ AxiomContainer current = handler.target;
while (true) {
discarded(current);
- if (elementLevel == 0) {
- if (current != container || current != document) {
+ if (handler.elementLevel == 0) {
+ if (current != container || current != handler.document) {
throw new IllegalStateException();
}
break;
}
- elementLevel--;
+ handler.elementLevel--;
if (current == container) {
break;
}
current = (AxiomContainer)((OMElement)current).getParent();
}
// Note that at this point current == container
- if (container == document) {
- target = null;
- done = true;
- } else if (elementLevel == 0 && document == null) {
+ if (container == handler.document) {
+ handler.target = null;
+ handler.done = true;
+ } else if (handler.elementLevel == 0 && handler.document == null) {
// Consume the remaining event; for the rationale, see StAXOMBuilder#next()
while (parserNext() != XMLStreamConstants.END_DOCUMENT) {
// Just loop
}
- target = null;
- done = true;
+ handler.target = null;
+ handler.done = true;
} else {
- target = (AxiomContainer)((OMElement)container).getParent();
+ handler.target = (AxiomContainer)((OMElement)container).getParent();
}
if (log.isDebugEnabled()) {
- log.debug("Caching re-enabled; new element level: " + elementLevel + "; done=" + done);
+ log.debug("Caching re-enabled; new element level: " + handler.elementLevel + "; done=" + handler.done);
}
- if (done && autoClose) {
+ if (handler.done && autoClose) {
close();
}
- cache = true;
+ handler.cache = true;
}
/**
@@ -496,7 +459,7 @@ public class StAXOMBuilder implements Bu
* @return Returns boolean.
*/
public final boolean isCompleted() {
- return done;
+ return handler.done;
}
public final CustomBuilder registerCustomBuilder(QName qName, int maxDepth, CustomBuilder customBuilder) {
@@ -521,30 +484,30 @@ public class StAXOMBuilder implements Bu
}
private void createDocumentIfNecessary() {
- if (document == null && parser.getEventType() == XMLStreamReader.START_DOCUMENT) {
- document = nodeFactory.createNode(model.getDocumentType());
+ if (handler.document == null && parser.getEventType() == XMLStreamReader.START_DOCUMENT) {
+ handler.document = handler.nodeFactory.createNode(handler.model.getDocumentType());
if (charEncoding != null) {
- document.setCharsetEncoding(charEncoding);
+ handler.document.setCharsetEncoding(charEncoding);
}
- document.setXMLVersion(parser.getVersion());
- document.setXMLEncoding(parser.getCharacterEncodingScheme());
- document.setStandalone(parser.isStandalone() ? "yes" : "no");
- document.coreSetBuilder(this);
- target = document;
- postProcessNode(document);
+ handler.document.setXMLVersion(parser.getVersion());
+ handler.document.setXMLEncoding(parser.getCharacterEncodingScheme());
+ handler.document.setStandalone(parser.isStandalone() ? "yes" : "no");
+ handler.document.coreSetBuilder(this);
+ handler.target = handler.document;
+ handler.postProcessNode(handler.document);
}
}
public final OMDocument getDocument() {
createDocumentIfNecessary();
- if (document == null) {
+ if (handler.document == null) {
throw new UnsupportedOperationException("There is no document linked to this builder");
}
- return document;
+ return handler.document;
}
public final String getCharsetEncoding() {
- return document.getCharsetEncoding();
+ return handler.document.getCharsetEncoding();
}
public final void close() {
@@ -564,7 +527,7 @@ public class StAXOMBuilder implements Bu
}
} finally {
_isClosed = true;
- done = true;
+ handler.done = true;
// Release the parser so that it can be GC'd or reused. This is important because the
// object model keeps a reference to the builder even after the builder is complete.
parser = null;
@@ -597,7 +560,7 @@ public class StAXOMBuilder implements Bu
if (detachable != null) {
detachable.detach();
} else {
- while (!done) {
+ while (!handler.done) {
next();
}
}
@@ -613,17 +576,17 @@ public class StAXOMBuilder implements Bu
* @throws OMException
*/
public int next() throws OMException {
- if (!cache) {
+ if (!handler.cache) {
throw new IllegalStateException("Can't process next node because caching is disabled");
}
// We need a loop here because we may decide to skip an event
while (true) {
- if (done) {
+ if (handler.done) {
throw new OMException();
}
createDocumentIfNecessary();
int token = parserNext();
- if (!cache) {
+ if (!handler.cache) {
return token;
}
@@ -632,12 +595,12 @@ public class StAXOMBuilder implements Bu
OMNode node;
switch (token) {
case XMLStreamConstants.START_ELEMENT: {
- elementLevel++;
+ handler.elementLevel++;
node = createNextOMElement();
// If the node was created by a custom builder, then it will be complete;
// in this case, the target doesn't change
if (!node.isComplete()) {
- target = (AxiomContainer)node;
+ handler.target = (AxiomContainer)node;
}
break;
}
@@ -648,21 +611,22 @@ public class StAXOMBuilder implements Bu
node = createOMText(XMLStreamConstants.CDATA);
break;
case XMLStreamConstants.END_ELEMENT:
- elementLevel--;
+ handler.elementLevel--;
endElement();
node = null;
break;
case XMLStreamConstants.END_DOCUMENT:
- done = true;
- ((AxiomContainer) this.document).setComplete(true);
- target = null;
+ handler.done = true;
+ ((AxiomContainer) this.handler.document).setComplete(true);
+ handler.target = null;
node = null;
break;
case XMLStreamConstants.SPACE:
node = createOMText(XMLStreamConstants.SPACE);
break;
case XMLStreamConstants.COMMENT:
- node = createComment();
+ handler.createComment(parser.getText());
+ node = null;
break;
case XMLStreamConstants.DTD:
node = createDTD();
@@ -677,10 +641,10 @@ public class StAXOMBuilder implements Bu
throw new OMException();
}
if (node != null) {
- postProcessNode(node);
+ handler.postProcessNode(node);
}
- if (target == null && !done) {
+ if (handler.target == null && !handler.done) {
// We get here if the document has been discarded (by getDocumentElement(true)
// or because the builder is linked to an OMSourcedElement) and
// we just processed the END_ELEMENT event for the root element. In this case, we consume
@@ -696,7 +660,7 @@ public class StAXOMBuilder implements Bu
while (parserNext() != XMLStreamConstants.END_DOCUMENT) {
// Just loop
}
- done = true;
+ handler.done = true;
}
return token;
@@ -710,10 +674,10 @@ public class StAXOMBuilder implements Bu
*/
private OMNode createNextOMElement() {
OMNode newElement = null;
- if (customBuilderForPayload != null && payloadSelector.isPayload(elementLevel, target)) {
+ if (customBuilderForPayload != null && payloadSelector.isPayload(handler.elementLevel, handler.target)) {
newElement = createWithCustomBuilder(customBuilderForPayload);
}
- if (newElement == null && customBuilders != null && elementLevel <= this.maxDepthForCustomBuilders) {
+ if (newElement == null && customBuilders != null && handler.elementLevel <= this.maxDepthForCustomBuilders) {
CustomBuilder customBuilder = customBuilders.get(parser.getNamespaceURI(), parser.getLocalName());
if (customBuilder != null) {
newElement = createWithCustomBuilder(customBuilder);
@@ -722,7 +686,7 @@ public class StAXOMBuilder implements Bu
if (newElement == null) {
newElement = createOMElement();
} else {
- elementLevel--; // Decrease level since custom builder read the end element event
+ handler.elementLevel--; // Decrease level since custom builder read the end element event
}
return newElement;
}
@@ -746,13 +710,13 @@ public class StAXOMBuilder implements Bu
// build the parent node. We temporarily set complete to true to avoid this.
// There is really an incompatibility between the contract of addNode and the
// custom builder API. This should be fixed in Axiom 1.3.
- target.setComplete(true);
+ handler.target.setComplete(true);
// Use target.getOMFactory() because the factory may actually be a SOAPFactory
- OMNode node = customBuilder.create(namespace, localPart, target, parser, target.getOMFactory());
+ OMNode node = customBuilder.create(namespace, localPart, handler.target, parser, handler.target.getOMFactory());
// TODO: dirty hack part 2
- target.setComplete(false);
+ handler.target.setComplete(false);
if (log.isDebugEnabled()) {
if (node != null) {
@@ -793,23 +757,13 @@ public class StAXOMBuilder implements Bu
*/
private OMNode createOMElement() throws OMException {
AxiomElement node = omfactory.createAxiomElement(
- model.determineElementType(target, elementLevel, parser.getNamespaceURI(), parser.getLocalName()),
- parser.getLocalName(), target, this);
+ handler.model.determineElementType(handler.target, handler.elementLevel, parser.getNamespaceURI(), parser.getLocalName()),
+ parser.getLocalName(), handler.target, this);
populateOMElement(node);
return node;
}
/**
- * Method createOMText.
- *
- * @return Returns OMNode.
- * @throws OMException
- */
- private OMNode createComment() throws OMException {
- return omfactory.createOMComment(target, parser.getText(), true);
- }
-
- /**
* Method createDTD.
*
* @return Returns OMNode.
@@ -830,7 +784,7 @@ public class StAXOMBuilder implements Bu
if (internalSubset != null && internalSubset.length() == 0) {
internalSubset = null;
}
- return omfactory.createOMDocType(target, dtdReader.getRootName(), dtdReader.getPublicId(),
+ return omfactory.createOMDocType(handler.target, dtdReader.getRootName(), dtdReader.getPublicId(),
dtdReader.getSystemId(), internalSubset, true);
}
@@ -873,22 +827,22 @@ public class StAXOMBuilder implements Bu
* @throws OMException
*/
private OMNode createPI() throws OMException {
- return omfactory.createOMProcessingInstruction(target, parser.getPITarget(), parser.getPIData(), true);
+ return omfactory.createOMProcessingInstruction(handler.target, parser.getPITarget(), parser.getPIData(), true);
}
private OMNode createEntityReference() {
- return omfactory.createOMEntityReference(target, parser.getLocalName(), parser.getText(), true);
+ return omfactory.createOMEntityReference(handler.target, parser.getLocalName(), parser.getText(), true);
}
private void endElement() {
- target.setComplete(true);
- if (elementLevel == 0) {
+ handler.target.setComplete(true);
+ if (handler.elementLevel == 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
// other cases, this will have the same effect as the instruction in the else clause.
- target = (AxiomContainer)document;
+ handler.target = (AxiomContainer)handler.document;
} else {
- target = (AxiomContainer)((OMElement)target).getParent();
+ handler.target = (AxiomContainer)((OMElement)handler.target).getParent();
}
}
@@ -900,7 +854,7 @@ public class StAXOMBuilder implements Bu
OMElement element = getDocument().getOMDocumentElement();
if (discardDocument) {
((AxiomElement)element).detachAndDiscardParent();
- document = null;
+ handler.document = null;
}
return element;
}
@@ -997,14 +951,14 @@ public class StAXOMBuilder implements Bu
throw ex;
}
if (event == XMLStreamConstants.END_DOCUMENT) {
- if (cache && elementLevel != 0) {
+ if (handler.cache && handler.elementLevel != 0) {
throw new OMException("Unexpected END_DOCUMENT event");
}
if (autoClose) {
close();
}
}
- model.validateEventType(event);
+ handler.model.validateEventType(event);
return event;
} catch (XMLStreamException ex) {
throw new DeferredParsingException(ex);
@@ -1029,21 +983,10 @@ public class StAXOMBuilder implements Bu
}
public final AxiomContainer getTarget() {
- return target;
+ return handler.target;
}
-
+
public final void addNodePostProcessor(NodePostProcessor nodePostProcessor) {
- if (nodePostProcessors == null) {
- nodePostProcessors = new ArrayList<NodePostProcessor>();
- }
- nodePostProcessors.add(nodePostProcessor);
- }
-
- private void postProcessNode(OMSerializable node) {
- if (nodePostProcessors != null) {
- for (int i=0, size=nodePostProcessors.size(); i<size; i++) {
- nodePostProcessors.get(i).postProcessNode(node);
- }
- }
+ handler.addNodePostProcessor(nodePostProcessor);
}
}
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=1728553&r1=1728552&r2=1728553&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 Thu Feb 4 21:05:41 2016
@@ -32,7 +32,7 @@ import org.apache.axiom.om.OMXMLStreamRe
import org.apache.axiom.om.QNameAwareOMDataSource;
import org.apache.axiom.om.impl.common.DeferredNamespace;
import org.apache.axiom.om.impl.common.OMNamespaceImpl;
-import org.apache.axiom.om.impl.common.PushOMBuilder;
+import org.apache.axiom.om.impl.common.builder.PushOMBuilder;
import org.apache.axiom.om.impl.common.builder.StAXOMBuilder;
import org.apache.axiom.om.impl.common.serializer.push.OutputException;
import org.apache.axiom.om.impl.common.serializer.push.Serializer;