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 2022/11/06 12:51:48 UTC

[ws-axiom] branch master updated: [AXIOM-506] Decouple AxiomContainerMixin from Activation

This is an automated email from the ASF dual-hosted git repository.

veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git


The following commit(s) were added to refs/heads/master by this push:
     new a56c76c4d [AXIOM-506] Decouple AxiomContainerMixin from Activation
a56c76c4d is described below

commit a56c76c4d973e9d618a212e3b3ed402fc8b655fb
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Sun Nov 6 12:51:38 2022 +0000

    [AXIOM-506] Decouple AxiomContainerMixin from Activation
---
 .../apache/axiom/om/impl/OMMultipartWriter.java    | 25 +++++++++++++++++++
 .../axiom/om/impl/mixin/AxiomContainerMixin.java   | 28 +++++-----------------
 2 files changed, 31 insertions(+), 22 deletions(-)

diff --git a/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java b/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java
index 5c45580c5..c0d2a9a1c 100644
--- a/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java
+++ b/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java
@@ -30,12 +30,14 @@ import org.apache.axiom.mime.ContentType;
 import org.apache.axiom.mime.Header;
 import org.apache.axiom.mime.MediaType;
 import org.apache.axiom.mime.MultipartBodyWriter;
+import org.apache.axiom.mime.PartBlob;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.format.xop.CombinedContentTransferEncodingPolicy;
 import org.apache.axiom.om.format.xop.ContentTransferEncodingPolicy;
 import org.apache.axiom.om.format.xop.ContentTypeProvider;
 import org.apache.axiom.soap.SOAPVersion;
 import org.apache.axiom.util.activation.DataHandlerContentTypeProvider;
+import org.apache.axiom.util.io.IOUtils;
 
 /**
  * Writes a MIME multipart package as used by XOP/MTOM and SOAP with Attachments. This class wraps a
@@ -182,6 +184,29 @@ public class OMMultipartWriter {
         writePart(blob, contentID, null);
     }
 
+    /**
+     * Write a MIME part. This is similar to {@link #writePart(Blob, String)}, but optionally
+     * consumes the blob (which is only supported for {@link PartBlob} instances).
+     * 
+     * @param blob
+     *            the content of the MIME part to write
+     * @param contentID
+     *            the content ID of the MIME part
+     * @param preserve
+     *            whether the content of the original MIME part should be preserved
+     * @throws IOException
+     *             if an I/O error occurs when writing the part to the underlying stream
+     */
+    public void writePart(PartBlob blob, String contentID, boolean preserve) throws IOException {
+        ContentType contentType = contentTypeProvider.getContentType(blob);
+        OutputStream part = writer.writePart(contentType, getContentTransferEncoding(blob, contentType), contentID, null);
+        IOUtils.copy(
+                blob.getPart().getInputStream(preserve),
+                part,
+                -1);
+        part.close();
+    }
+
     /**
      * Complete writing of the MIME multipart package. This method delegates to
      * {@link MultipartBodyWriter#complete()}.
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerMixin.java
index b504279a9..86b6240a7 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomContainerMixin.java
@@ -21,10 +21,8 @@ package org.apache.axiom.om.impl.mixin;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.Writer;
-import java.text.ParseException;
 import java.util.Iterator;
 
-import javax.activation.DataHandler;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -32,6 +30,7 @@ import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.sax.SAXSource;
 
+import org.apache.axiom.blob.Blob;
 import org.apache.axiom.core.Axis;
 import org.apache.axiom.core.Builder;
 import org.apache.axiom.core.CoreChildNode;
@@ -49,8 +48,7 @@ import org.apache.axiom.core.stream.sax.input.XmlHandlerContentHandler;
 import org.apache.axiom.core.stream.serializer.Serializer;
 import org.apache.axiom.core.stream.stax.pull.output.StAXPivot;
 import org.apache.axiom.core.stream.stax.push.input.XMLStreamWriterNamespaceContextProvider;
-import org.apache.axiom.mime.ContentType;
-import org.apache.axiom.mime.activation.PartDataHandler;
+import org.apache.axiom.mime.PartBlob;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
@@ -78,8 +76,6 @@ import org.apache.axiom.om.impl.stream.xop.ContentIDGeneratorImpl;
 import org.apache.axiom.om.impl.stream.xop.OptimizationPolicy;
 import org.apache.axiom.om.impl.stream.xop.OptimizationPolicyImpl;
 import org.apache.axiom.om.impl.stream.xop.XOPEncodingFilterHandler;
-import org.apache.axiom.util.activation.DataHandlerUtils;
-import org.apache.axiom.util.io.IOUtils;
 import org.apache.axiom.weaver.annotation.Mixin;
 import org.xml.sax.InputSource;
 
@@ -386,23 +382,11 @@ public abstract class AxiomContainerMixin implements AxiomContainer {
         if (encoder != null) {
             rootPartOutputStream.close();
             for (String contentID : encoder.getContentIDs()) {
-                DataHandler dataHandler =
-                        DataHandlerUtils.toDataHandler(encoder.getBlob(contentID));
-                if (cache || !(dataHandler instanceof PartDataHandler)) {
-                    multipartWriter.writePart(DataHandlerUtils.toBlob(dataHandler), contentID);
+                Blob blob = encoder.getBlob(contentID);
+                if (cache || !(blob instanceof PartBlob)) {
+                    multipartWriter.writePart(blob, contentID);
                 } else {
-                    ContentType contentType;
-                    try {
-                        contentType = new ContentType(dataHandler.getContentType());
-                    } catch (ParseException ex) {
-                        throw new OMException(ex);
-                    }
-                    OutputStream part = multipartWriter.writePart(contentType, contentID);
-                    IOUtils.copy(
-                            ((PartDataHandler) dataHandler).getPart().getInputStream(false),
-                            part,
-                            -1);
-                    part.close();
+                    multipartWriter.writePart((PartBlob) blob, contentID, false);
                 }
             }
             multipartWriter.complete();