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/05/25 23:05:24 UTC
svn commit: r1745547 - in /webservices/axiom/trunk/aspects/om-aspects: ./
src/main/java/org/apache/axiom/om/impl/mixin/
src/main/java/org/apache/axiom/om/impl/stream/ds/
src/main/java/org/apache/axiom/om/impl/stream/stax/
Author: veithen
Date: Wed May 25 23:05:24 2016
New Revision: 1745547
URL: http://svn.apache.org/viewvc?rev=1745547&view=rev
Log:
Move the constructor code out of MTOMXMLStreamWriterImpl and transform that class into a thin wrapper.
Modified:
webservices/axiom/trunk/aspects/om-aspects/pom.xml
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/stream/ds/PushOMDataSourceReader.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/OptimizationPolicyImpl.java
Modified: webservices/axiom/trunk/aspects/om-aspects/pom.xml
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/pom.xml?rev=1745547&r1=1745546&r2=1745547&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/pom.xml (original)
+++ webservices/axiom/trunk/aspects/om-aspects/pom.xml Wed May 25 23:05:24 2016
@@ -82,7 +82,8 @@
<configuration>
<ignore>
<!-- TODO -->
- org.apache.axiom.om.impl.stream.stax.MTOMXMLStreamWriterImpl -> org.apache.axiom.om.impl.stream.ds.PushOMDataSourceStreamWriter
+ org.apache.axiom.om.impl.stream.stax.MTOMXMLStreamWriterImpl -> org.apache.axiom.om.impl.stream.ds.PushOMDataSourceStreamWriter,
+ org.apache.axiom.om.impl.intf.AxiomContainer$AxiomContainerSupport$2 -> org.apache.axiom.om.impl.stream.xop.XOPEncodingFilterHandler
</ignore>
</configuration>
</execution>
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=1745547&r1=1745546&r2=1745547&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 Wed May 25 23:05:24 2016
@@ -23,6 +23,7 @@ import java.io.OutputStream;
import java.io.Writer;
import java.util.Iterator;
+import javax.activation.DataHandler;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
@@ -30,6 +31,7 @@ import javax.xml.stream.XMLStreamWriter;
import javax.xml.transform.sax.SAXResult;
import javax.xml.transform.sax.SAXSource;
+import org.apache.axiom.attachments.lifecycle.DataHandlerExt;
import org.apache.axiom.core.Axis;
import org.apache.axiom.core.Builder;
import org.apache.axiom.core.CoreChildNode;
@@ -46,6 +48,8 @@ import org.apache.axiom.core.stream.sax.
import org.apache.axiom.core.stream.serializer.Serializer;
import org.apache.axiom.core.stream.stax.StAXPivot;
import org.apache.axiom.core.stream.stax.XMLStreamWriterNamespaceContextProvider;
+import org.apache.axiom.core.stream.xop.AbstractXOPEncodingFilterHandler;
+import org.apache.axiom.core.stream.xop.CompletionListener;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.OMNamespace;
@@ -55,6 +59,7 @@ import org.apache.axiom.om.OMSerializabl
import org.apache.axiom.om.OMXMLParserWrapper;
import org.apache.axiom.om.OMXMLStreamReaderConfiguration;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
+import org.apache.axiom.om.impl.OMMultipartWriter;
import org.apache.axiom.om.impl.common.AxiomExceptionTranslator;
import org.apache.axiom.om.impl.common.AxiomSemantics;
import org.apache.axiom.om.impl.common.SAXResultContentHandler;
@@ -71,7 +76,12 @@ import org.apache.axiom.om.impl.intf.Axi
import org.apache.axiom.om.impl.intf.OMFactoryEx;
import org.apache.axiom.om.impl.stream.stax.AxiomXMLStreamReaderExtensionFactory;
import org.apache.axiom.om.impl.stream.stax.MTOMXMLStreamWriterImpl;
+import org.apache.axiom.om.impl.stream.stax.OptimizationPolicyImpl;
+import org.apache.axiom.om.impl.stream.stax.XmlHandlerStreamWriter;
+import org.apache.axiom.om.impl.stream.xop.XOPEncodingFilterHandler;
import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.util.io.IOUtils;
+import org.apache.axiom.util.stax.xop.ContentIDGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.InputSource;
@@ -247,7 +257,7 @@ public aspect AxiomContainerSupport {
// If the input xmlWriter is not an MTOMXMLStreamWriter, then wrapper it
MTOMXMLStreamWriter writer = xmlWriter instanceof MTOMXMLStreamWriter ?
(MTOMXMLStreamWriter) xmlWriter :
- new MTOMXMLStreamWriterImpl(xmlWriter);
+ new MTOMXMLStreamWriterImpl(xmlWriter, new OMOutputFormat(), false);
try {
internalSerialize(createSerializer(writer, true), cache);
} catch (CoreModelException ex) {
@@ -276,8 +286,62 @@ public aspect AxiomContainerSupport {
serialize(writer, new OMOutputFormat(), cache);
}
- private void AxiomContainer.serialize(OutputStream output, OMOutputFormat format, boolean cache) throws XMLStreamException {
- serialize(new MTOMXMLStreamWriterImpl(output, format, cache), cache);
+ private void AxiomContainer.serialize(OutputStream out, final OMOutputFormat format, final boolean cache) throws XMLStreamException {
+ String encoding = format.getCharSetEncoding();
+ if (encoding == null) { //Default encoding is UTF-8
+ format.setCharSetEncoding(encoding = OMOutputFormat.DEFAULT_CHAR_SET_ENCODING);
+ }
+
+ final OMMultipartWriter multipartWriter;
+ final OutputStream rootPartOutputStream;
+ if (format.isOptimized()) {
+ multipartWriter = new OMMultipartWriter(out, format);
+ try {
+ rootPartOutputStream = multipartWriter.writeRootPart();
+ } catch (IOException ex) {
+ throw new XMLStreamException(ex);
+ }
+ } else {
+ multipartWriter = null;
+ rootPartOutputStream = out;
+ }
+
+ Serializer serializer = new Serializer(rootPartOutputStream, encoding);
+
+ XmlHandler handler;
+ if (format.isOptimized()) {
+ ContentIDGenerator contentIDGenerator = new ContentIDGenerator() {
+ @Override
+ public String generateContentID(String existingContentID) {
+ return existingContentID != null ? existingContentID : format.getNextContentId();
+ }
+ };
+ handler = new XOPEncodingFilterHandler(serializer, contentIDGenerator, new OptimizationPolicyImpl(format), new CompletionListener() {
+ @Override
+ public void completed(AbstractXOPEncodingFilterHandler encoder) throws StreamException {
+ try {
+ rootPartOutputStream.close();
+ for (String contentID : ((XOPEncodingFilterHandler)encoder).getContentIDs()) {
+ DataHandler dataHandler = ((XOPEncodingFilterHandler)encoder).getDataHandler(contentID);
+ if (cache || !(dataHandler instanceof DataHandlerExt)) {
+ multipartWriter.writePart(dataHandler, contentID);
+ } else {
+ OutputStream out = multipartWriter.writePart(dataHandler.getContentType(), contentID);
+ IOUtils.copy(((DataHandlerExt)dataHandler).readOnce(), out, -1);
+ out.close();
+ }
+ }
+ multipartWriter.complete();
+ } catch (IOException ex) {
+ throw new StreamException(ex);
+ }
+ }
+ });
+ } else {
+ handler = serializer;
+ }
+
+ serialize(new MTOMXMLStreamWriterImpl(new XmlHandlerStreamWriter(handler, serializer), format, true), cache);
}
private void AxiomContainer.serialize(Writer writer, OMOutputFormat format, boolean cache) throws XMLStreamException {
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=1745547&r1=1745546&r2=1745547&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 Wed May 25 23:05:24 2016
@@ -61,7 +61,7 @@ final class PushOMDataSourceReader imple
OMOutputFormat format = new OMOutputFormat();
format.setDoOptimize(true);
handler.startFragment();
- dataSource.serialize(new MTOMXMLStreamWriterImpl(new PushOMDataSourceStreamWriter(writer), format));
+ dataSource.serialize(new MTOMXMLStreamWriterImpl(new PushOMDataSourceStreamWriter(writer), format, false));
handler.completed();
} catch (XMLStreamException ex) {
Throwable cause = ex.getCause();
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java?rev=1745547&r1=1745546&r2=1745547&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/MTOMXMLStreamWriterImpl.java Wed May 25 23:05:24 2016
@@ -19,30 +19,22 @@
package org.apache.axiom.om.impl.stream.stax;
-import java.io.IOException;
import java.io.OutputStream;
import javax.activation.DataHandler;
import javax.xml.namespace.NamespaceContext;
-import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamWriter;
-import org.apache.axiom.attachments.lifecycle.DataHandlerExt;
import org.apache.axiom.core.stream.StreamException;
import org.apache.axiom.core.stream.XmlHandler;
import org.apache.axiom.core.stream.serializer.Serializer;
-import org.apache.axiom.core.stream.xop.AbstractXOPEncodingFilterHandler;
-import org.apache.axiom.core.stream.xop.CompletionListener;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
-import org.apache.axiom.om.impl.OMMultipartWriter;
import org.apache.axiom.om.impl.stream.ds.PushOMDataSourceStreamWriter;
import org.apache.axiom.om.impl.stream.xop.XOPEncodingFilterHandler;
import org.apache.axiom.om.impl.stream.xop.XOPHandler;
import org.apache.axiom.om.util.CommonUtils;
-import org.apache.axiom.util.io.IOUtils;
-import org.apache.axiom.util.stax.xop.ContentIDGenerator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -57,109 +49,19 @@ public class MTOMXMLStreamWriterImpl ext
private boolean isComplete = false; // have the attachments been written
private int depth = 0; // current element depth
- public MTOMXMLStreamWriterImpl(XMLStreamWriter xmlWriter, OMOutputFormat format) {
+ public MTOMXMLStreamWriterImpl(XMLStreamWriter xmlWriter, OMOutputFormat format, boolean callComplete) {
this.xmlWriter = xmlWriter;
- if (log.isTraceEnabled()) {
- log.trace("Call Stack =" + CommonUtils.callStackToString());
- }
- this.format = format;
- callComplete = false;
- }
-
- public MTOMXMLStreamWriterImpl(XMLStreamWriter xmlWriter) {
- this(xmlWriter, new OMOutputFormat());
- }
-
- public MTOMXMLStreamWriterImpl(OutputStream outStream, OMOutputFormat format)
- throws XMLStreamException, FactoryConfigurationError {
- this(outStream, format, true);
- }
-
- /**
- * Creates a new MTOMXMLStreamWriter with specified encoding.
- *
- * @param outStream
- * @param format
- * @param preserveAttachments
- * specifies whether attachments must be preserved or can be consumed (i.e. streamed)
- * during serialization; if set to <code>false</code> then
- * {@link DataHandlerExt#readOnce()} or an equivalent method may be used to get the
- * data for an attachment
- * @throws XMLStreamException
- * @throws FactoryConfigurationError
- * @see OMOutputFormat#DEFAULT_CHAR_SET_ENCODING
- */
- public MTOMXMLStreamWriterImpl(OutputStream outStream, final OMOutputFormat format, final boolean preserveAttachments)
- throws XMLStreamException, FactoryConfigurationError {
if (log.isDebugEnabled()) {
log.debug("Creating MTOMXMLStreamWriter");
- log.debug("OutputStream =" + outStream.getClass());
log.debug("OMFormat = " + format.toString());
- log.debug("preserveAttachments = " + preserveAttachments);
}
if (log.isTraceEnabled()) {
log.trace("Call Stack =" + CommonUtils.callStackToString());
}
this.format = format;
-
- String encoding = format.getCharSetEncoding();
- if (encoding == null) { //Default encoding is UTF-8
- format.setCharSetEncoding(encoding = OMOutputFormat.DEFAULT_CHAR_SET_ENCODING);
- }
-
- final OMMultipartWriter multipartWriter;
- final OutputStream rootPartOutputStream;
- if (format.isOptimized()) {
- multipartWriter = new OMMultipartWriter(outStream, format);
- try {
- rootPartOutputStream = multipartWriter.writeRootPart();
- } catch (IOException ex) {
- throw new XMLStreamException(ex);
- }
- } else {
- multipartWriter = null;
- rootPartOutputStream = outStream;
- }
-
- Serializer serializer = new Serializer(rootPartOutputStream, encoding);
-
- XmlHandler handler;
- if (format.isOptimized()) {
- ContentIDGenerator contentIDGenerator = new ContentIDGenerator() {
- @Override
- public String generateContentID(String existingContentID) {
- return existingContentID != null ? existingContentID : format.getNextContentId();
- }
- };
- handler = new XOPEncodingFilterHandler(serializer, contentIDGenerator, new OptimizationPolicyImpl(format), new CompletionListener() {
- @Override
- public void completed(AbstractXOPEncodingFilterHandler encoder) throws StreamException {
- try {
- rootPartOutputStream.close();
- for (String contentID : ((XOPEncodingFilterHandler)encoder).getContentIDs()) {
- DataHandler dataHandler = ((XOPEncodingFilterHandler)encoder).getDataHandler(contentID);
- if (preserveAttachments || !(dataHandler instanceof DataHandlerExt)) {
- multipartWriter.writePart(dataHandler, contentID);
- } else {
- OutputStream out = multipartWriter.writePart(dataHandler.getContentType(), contentID);
- IOUtils.copy(((DataHandlerExt)dataHandler).readOnce(), out, -1);
- out.close();
- }
- }
- multipartWriter.complete();
- } catch (IOException ex) {
- throw new StreamException(ex);
- }
- }
- });
- } else {
- handler = serializer;
- }
-
- xmlWriter = new XmlHandlerStreamWriter(handler, serializer);
- callComplete = true;
+ this.callComplete = callComplete;
}
-
+
/**
* Get the {@link XmlHandler} events are serialized to.
*
Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/OptimizationPolicyImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/OptimizationPolicyImpl.java?rev=1745547&r1=1745546&r2=1745547&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/OptimizationPolicyImpl.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/stream/stax/OptimizationPolicyImpl.java Wed May 25 23:05:24 2016
@@ -36,7 +36,7 @@ import org.apache.commons.logging.LogFac
* <p>
* For internal use only.
*/
-class OptimizationPolicyImpl implements OptimizationPolicy {
+public final class OptimizationPolicyImpl implements OptimizationPolicy {
private static final Log log = LogFactory.getLog(OptimizationPolicyImpl.class);
private final OMOutputFormat format;