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 <andreas.veit...@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();