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/18 09:13:36 UTC
svn commit: r1731015 - in
/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl:
common/ common/builder/ common/serializer/push/ common/serializer/push/sax/
common/serializer/push/stax/ mixin/ stream/ stream/stax/
Author: veithen
Date: Thu Feb 18 08:13:36 2016
New Revision: 1731015
URL: http://svn.apache.org/viewvc?rev=1731015&view=rev
Log:
Simplify OMDataSource serialization and promote code reuse.
Removed:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/ContentHandlerXMLStreamWriter.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXExceptionWrapper.java
Modified:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.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/serializer/push/SerializerImpl.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
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/XmlHandler.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandlerWrapper.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/SAXResultContentHandler.java Thu Feb 18 08:13:36 2016
@@ -20,14 +20,12 @@ package org.apache.axiom.om.impl.common;
import org.apache.axiom.om.OMAttribute;
import org.apache.axiom.om.OMContainer;
-import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMDocument;
import org.apache.axiom.om.OMElement;
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.impl.stream.StreamException;
import org.apache.axiom.om.impl.stream.XmlHandler;
public final class SAXResultContentHandler implements XmlHandler {
@@ -119,11 +117,4 @@ public final class SAXResultContentHand
throw new UnsupportedOperationException();
}
}
-
- @Override
- public void processOMDataSource(String namespaceURI, String localName, OMDataSource dataSource)
- throws StreamException {
- // TODO
- throw new UnsupportedOperationException();
- }
}
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=1731015&r1=1731014&r2=1731015&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 Thu Feb 18 08:13:36 2016
@@ -30,8 +30,6 @@ import org.apache.axiom.core.Builder;
import org.apache.axiom.core.CoreNode;
import org.apache.axiom.core.CoreParentNode;
import org.apache.axiom.core.NodeFactory;
-import org.apache.axiom.om.OMDataSource;
-import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMNamespace;
import org.apache.axiom.om.impl.common.AxiomSemantics;
import org.apache.axiom.om.impl.common.OMNamespaceImpl;
@@ -268,20 +266,4 @@ public final class BuilderHandler implem
target = null;
done = true;
}
-
- @Override
- public void processOMDataSource(String namespaceURI, String localName, OMDataSource dataSource) throws StreamException {
- Class<? extends AxiomElement> elementType = model.determineElementType(target, depth+1, namespaceURI, localName);
- Class<? extends AxiomSourcedElement> sourcedElementType;
- if (elementType == AxiomElement.class) {
- sourcedElementType = AxiomSourcedElement.class;
- } else if (AxiomSourcedElement.class.isAssignableFrom(elementType)) {
- sourcedElementType = elementType.asSubclass(AxiomSourcedElement.class);
- } else {
- throw new OMException("Cannot build an OMSourcedElement where a " + elementType.getName() + " is expected");
- }
- AxiomSourcedElement element = nodeFactory.createNode(sourcedElementType);
- element.init(localName, new OMNamespaceImpl(namespaceURI, null), dataSource);
- addChild(element);
- }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/SerializerImpl.java Thu Feb 18 08:13:36 2016
@@ -19,20 +19,15 @@
package org.apache.axiom.om.impl.common.serializer.push;
import javax.activation.DataHandler;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
import org.apache.axiom.core.CoreElement;
import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
-import org.apache.axiom.om.DeferredParsingException;
import org.apache.axiom.om.OMContainer;
import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMSerializable;
-import org.apache.axiom.om.impl.common.builder.StAXHelper;
-import org.apache.axiom.om.impl.common.util.OMDataSourceUtil;
import org.apache.axiom.om.impl.intf.TextContent;
import org.apache.axiom.om.impl.stream.StreamException;
import org.apache.axiom.om.impl.stream.XmlHandler;
@@ -77,44 +72,6 @@ public abstract class SerializerImpl imp
return handler;
}
- /**
- * Serialize the given data source.
- *
- * @param dataSource
- * the data source to serialize
- * @throws StreamException
- * if an error occurs while writing the data
- * @throws DeferredParsingException
- * if an error occurs while reading from the data source
- */
- public final void processOMDataSource(String namespaceURI, String localName, OMDataSource dataSource) throws StreamException {
- // Note: if we can't determine the type (push/pull) of the OMDataSource, we
- // default to push
- if (OMDataSourceUtil.isPullDataSource(dataSource)) {
- try {
- XMLStreamReader reader = dataSource.getReader();
- StAXHelper helper = new StAXHelper(reader, this);
- while (helper.lookahead() != XMLStreamReader.START_ELEMENT) {
- helper.parserNext();
- }
- int depth = 0;
- do {
- switch (helper.next()) {
- case XMLStreamReader.START_ELEMENT: depth++; break;
- case XMLStreamReader.END_ELEMENT: depth--; break;
- }
- } while (depth > 0);
- reader.close();
- } catch (XMLStreamException ex) {
- // XMLStreamExceptions occurring while _writing_ are wrapped in an OutputException.
- // Therefore, if we get here, there must have been a problem while _reading_.
- throw new DeferredParsingException(ex);
- }
- } else {
- serializePushOMDataSource(dataSource);
- }
- }
-
public final void processCharacterData(Object data, boolean ignorable) throws StreamException {
if (data instanceof TextContent) {
TextContent textContent = (TextContent)data;
@@ -208,20 +165,5 @@ public abstract class SerializerImpl imp
protected abstract void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID, boolean optimize) throws StreamException;
- /**
- * Serialize the given data source using {@link OMDataSource#serialize(XMLStreamWriter)}. The
- * implementation must construct an appropriate {@link XMLStreamWriter} instance to pass to that
- * method and wrap any {@link XMLStreamException} that may be thrown in an
- * {@link StreamException} or {@link DeferredParsingException}.
- *
- * @param dataSource
- * the data source to serialize
- * @throws StreamException
- * if an error occurs while writing the data
- * @throws DeferredParsingException
- * if an error occurs while reading from the data source
- */
- protected abstract void serializePushOMDataSource(OMDataSource dataSource) throws StreamException;
-
public abstract void endDocument() throws StreamException;
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/sax/SAXSerializer.java Thu Feb 18 08:13:36 2016
@@ -21,11 +21,8 @@ package org.apache.axiom.om.impl.common.
import java.io.IOException;
import javax.activation.DataHandler;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamWriter;
import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
-import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.impl.common.serializer.push.SerializerImpl;
import org.apache.axiom.om.impl.stream.StreamException;
@@ -192,25 +189,9 @@ public class SAXSerializer extends Seria
public void writeDataHandler(DataHandlerProvider dataHandlerProvider, String contentID,
boolean optimize) throws StreamException {
- // TODO
- throw new UnsupportedOperationException();
- }
-
- protected void serializePushOMDataSource(OMDataSource dataSource) throws StreamException {
try {
- XMLStreamWriter writer = new ContentHandlerXMLStreamWriter(helper, contentHandler, lexicalHandler, nsContext);
- if (startDocumentWritten) {
- dataSource.serialize(writer);
- } else {
- contentHandler.startDocument();
- dataSource.serialize(writer);
- contentHandler.endDocument();
- }
- } catch (SAXException ex) {
- throw new StreamException(ex);
- } catch (SAXExceptionWrapper ex) {
- throw new StreamException(ex.getCause());
- } catch (XMLStreamException ex) {
+ writeDataHandler(dataHandlerProvider.getDataHandler(), contentID, optimize);
+ } catch (IOException ex) {
throw new StreamException(ex);
}
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/serializer/push/stax/StAXSerializer.java Thu Feb 18 08:13:36 2016
@@ -22,7 +22,6 @@ import java.io.IOException;
import org.apache.axiom.ext.stax.datahandler.DataHandlerProvider;
import org.apache.axiom.ext.stax.datahandler.DataHandlerWriter;
-import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMNode;
import org.apache.axiom.om.OMSerializable;
@@ -52,15 +51,8 @@ public class StAXSerializer extends Seri
return buildHandler(root, true, false);
}
- protected void serializePushOMDataSource(OMDataSource dataSource) throws StreamException {
- try {
- dataSource.serialize(writer);
- } catch (XMLStreamException ex) {
- // We cannot really differentiate between exceptions thrown by the XMLStreamWriter
- // and exceptions thrown by the data source itself. We wrap all XMLStreamExceptions
- // as OutputExceptions.
- throw new StreamException(ex);
- }
+ public XMLStreamWriter getWriter() {
+ return writer;
}
@Override
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=1731015&r1=1731014&r2=1731015&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 18 08:13:36 2016
@@ -22,6 +22,7 @@ import org.apache.axiom.core.Builder;
import org.apache.axiom.core.ClonePolicy;
import org.apache.axiom.core.CoreElement;
import org.apache.axiom.core.CoreNode;
+import org.apache.axiom.om.DeferredParsingException;
import org.apache.axiom.om.OMCloneOptions;
import org.apache.axiom.om.OMDataSource;
import org.apache.axiom.om.OMDataSourceExt;
@@ -36,11 +37,14 @@ import org.apache.axiom.om.impl.common.O
import org.apache.axiom.om.impl.common.builder.PlainXMLModel;
import org.apache.axiom.om.impl.common.builder.PushBuilder;
import org.apache.axiom.om.impl.common.builder.PushOMDataSourceInput;
+import org.apache.axiom.om.impl.common.builder.StAXHelper;
import org.apache.axiom.om.impl.common.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.common.serializer.push.stax.StAXSerializer;
import org.apache.axiom.om.impl.common.util.OMDataSourceUtil;
import org.apache.axiom.om.impl.intf.AxiomSourcedElement;
import org.apache.axiom.om.impl.stream.StreamException;
import org.apache.axiom.om.impl.stream.XmlHandler;
+import org.apache.axiom.om.impl.stream.XmlHandlerWrapper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -411,9 +415,43 @@ public aspect AxiomSourcedElementSupport
} else if (cache&& OMDataSourceUtil.isDestructiveWrite(dataSource)) {
forceExpand();
defaultInternalSerialize(handler, format, true);
+ // Note: if we can't determine the type (push/pull) of the OMDataSource, we
+ // default to push
+ // TODO: the serializer ignores namespaceURI and localName
+ } else if (OMDataSourceUtil.isPullDataSource(dataSource)) {
+ try {
+ XMLStreamReader reader = dataSource.getReader();
+ StAXHelper helper = new StAXHelper(reader, handler);
+ while (helper.lookahead() != XMLStreamReader.START_ELEMENT) {
+ helper.parserNext();
+ }
+ int depth = 0;
+ do {
+ switch (helper.next()) {
+ case XMLStreamReader.START_ELEMENT: depth++; break;
+ case XMLStreamReader.END_ELEMENT: depth--; break;
+ }
+ } while (depth > 0);
+ reader.close();
+ } catch (XMLStreamException ex) {
+ // XMLStreamExceptions occurring while _writing_ are wrapped in an OutputException.
+ // Therefore, if we get here, there must have been a problem while _reading_.
+ throw new DeferredParsingException(ex);
+ }
} else {
- // TODO: the serializer ignores namespaceURI and localName
- handler.processOMDataSource(null, null, dataSource);
+ XmlHandler unwrappedHandler = handler;
+ while (unwrappedHandler instanceof XmlHandlerWrapper) {
+ unwrappedHandler = ((XmlHandlerWrapper)unwrappedHandler).getParent();
+ }
+ if (unwrappedHandler instanceof StAXSerializer) {
+ try {
+ dataSource.serialize(((StAXSerializer)unwrappedHandler).getWriter());
+ } catch (XMLStreamException ex) {
+ throw new StreamException(ex);
+ }
+ } else {
+ new PushOMDataSourceInput(this, dataSource).createReader(handler).proceed();
+ }
}
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandler.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandler.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandler.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandler.java Thu Feb 18 08:13:36 2016
@@ -18,8 +18,6 @@
*/
package org.apache.axiom.om.impl.stream;
-import org.apache.axiom.om.OMDataSource;
-
public interface XmlHandler {
void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding, boolean standalone) throws StreamException;
@@ -47,6 +45,4 @@ public interface XmlHandler {
void processCDATASection(String content) throws StreamException;
void processEntityReference(String name, String replacementText) throws StreamException;
-
- void processOMDataSource(String namespaceURI, String localName, OMDataSource dataSource) throws StreamException;
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandlerWrapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandlerWrapper.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandlerWrapper.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/XmlHandlerWrapper.java Thu Feb 18 08:13:36 2016
@@ -18,8 +18,6 @@
*/
package org.apache.axiom.om.impl.stream;
-import org.apache.axiom.om.OMDataSource;
-
public class XmlHandlerWrapper implements XmlHandler {
private final XmlHandler parent;
@@ -27,6 +25,10 @@ public class XmlHandlerWrapper implement
this.parent = parent;
}
+ public final XmlHandler getParent() {
+ return parent;
+ }
+
public void startDocument(String inputEncoding, String xmlVersion, String xmlEncoding,
boolean standalone) throws StreamException {
parent.startDocument(inputEncoding, xmlVersion, xmlEncoding, standalone);
@@ -84,9 +86,4 @@ public class XmlHandlerWrapper implement
public void processEntityReference(String name, String replacementText) throws StreamException {
parent.processEntityReference(name, replacementText);
}
-
- public void processOMDataSource(String namespaceURI, String localName, OMDataSource dataSource)
- throws StreamException {
- parent.processOMDataSource(namespaceURI, localName, dataSource);
- }
}
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java?rev=1731015&r1=1731014&r2=1731015&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/XmlHandlerStreamWriter.java Thu Feb 18 08:13:36 2016
@@ -97,6 +97,7 @@ public class XmlHandlerStreamWriter exte
}
protected void doWriteStartElement(String prefix, String localName, String namespaceURI) throws XMLStreamException {
+ finishStartElement();
try {
handler.startElement(normalize(namespaceURI), localName, normalize(prefix));
} catch (StreamException ex) {
@@ -110,6 +111,7 @@ public class XmlHandlerStreamWriter exte
}
protected void doWriteEndElement() throws XMLStreamException {
+ finishStartElement();
try {
handler.endElement();
} catch (StreamException ex) {