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;