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/07 20:49:05 UTC

[ws-axiom] branch master updated: [AXIOM-506] Migrate MTOMXMLStreamWriter to Blob

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 07b42d42b [AXIOM-506] Migrate MTOMXMLStreamWriter to Blob
07b42d42b is described below

commit 07b42d42bc0ddc1fe57bf4f1a90ad07c63edba70
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Mon Nov 7 20:48:56 2022 +0000

    [AXIOM-506] Migrate MTOMXMLStreamWriter to Blob
---
 axiom-api/pom.xml                                      |  1 -
 .../main/java/org/apache/axiom/om/OMDataSource.java    |  3 +--
 .../org/apache/axiom/om/impl/MTOMXMLStreamWriter.java  | 13 ++++++-------
 .../axiom/om/ds/jaxb/AttachmentMarshallerImpl.java     |  3 ++-
 .../om/impl/stream/ds/MTOMXMLStreamWriterImpl.java     |  6 +++---
 .../om/impl/stream/ds/PushOMDataSourceXOPHandler.java  | 18 ++++++++----------
 .../om/impl/stream/xop/XOPEncodingFilterHandler.java   |  8 +++-----
 .../apache/axiom/om/impl/stream/xop/XOPHandler.java    |  4 ++--
 8 files changed, 25 insertions(+), 31 deletions(-)

diff --git a/axiom-api/pom.xml b/axiom-api/pom.xml
index 3d278f885..e44b51d69 100644
--- a/axiom-api/pom.xml
+++ b/axiom-api/pom.xml
@@ -290,7 +290,6 @@
                                 org.apache.axiom.util.base64.Base64Utils -&gt; org.apache.axiom.util.activation.DataSourceUtils,
                                 org.apache.axiom.util.base64.Base64Utils -&gt; javax.activation.DataSource,
                                 org.apache.axiom.util.base64.Base64Utils -&gt; javax.activation.DataHandler,
-                                org.apache.axiom.om.impl.MTOMXMLStreamWriter -&gt; javax.activation.DataHandler,
                                 <!-- o.a.a.soap should be a layer on top of o.a.a.om -->
                                 org.apache.axiom.om.OMAbstractFactory -&gt; org.apache.axiom.soap.SOAPFactory,
                                 org.apache.axiom.om.OMMetaFactory -&gt; org.apache.axiom.soap.SOAPFactory,
diff --git a/axiom-api/src/main/java/org/apache/axiom/om/OMDataSource.java b/axiom-api/src/main/java/org/apache/axiom/om/OMDataSource.java
index 50e353262..751e31e75 100644
--- a/axiom-api/src/main/java/org/apache/axiom/om/OMDataSource.java
+++ b/axiom-api/src/main/java/org/apache/axiom/om/OMDataSource.java
@@ -22,7 +22,6 @@
  */
 package org.apache.axiom.om;
 
-import javax.activation.DataHandler;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
@@ -130,7 +129,7 @@ public interface OMDataSource {
      * utility methods) to write the data to the stream. This is the preferred approach, unless the
      * content is produced by a third party library that is not aware of these APIs.
      * <li>Cast the {@link XMLStreamWriter} to an {@link MTOMXMLStreamWriter}, use
-     * {@link MTOMXMLStreamWriter#prepareDataHandler(DataHandler)} and generate the
+     * {@link MTOMXMLStreamWriter#prepareBlob(Blob)} and generate the
      * necessary {@code xop:Include} elements. In this case, the implementation MAY use
      * {@link MTOMXMLStreamWriter#isOptimized()} to check if XOP/MTOM is enabled at all.
      * </ul>
diff --git a/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java b/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
index a7bd1cf27..ea1140495 100644
--- a/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
+++ b/axiom-api/src/main/java/org/apache/axiom/om/impl/MTOMXMLStreamWriter.java
@@ -21,7 +21,6 @@ package org.apache.axiom.om.impl;
 
 import java.io.OutputStream;
 
-import javax.activation.DataHandler;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
@@ -51,7 +50,7 @@ public abstract class MTOMXMLStreamWriter implements XMLStreamWriter {
      * entirely transparent for the caller and there should be no need to check if the writer is
      * producing MTOM. However, in some cases this is not possible, such as when integrating with
      * 3rd party libraries. The serialization code should then use
-     * {@link #prepareDataHandler(DataHandler)} so that it can write {@code xop:Include} elements
+     * {@link #prepareBlob(Blob)} so that it can write {@code xop:Include} elements
      * directly to the stream. In that case, the code may use the {@link #isOptimized()} method
      * check if MTOM is enabled at all.
      * 
@@ -60,9 +59,9 @@ public abstract class MTOMXMLStreamWriter implements XMLStreamWriter {
     public abstract boolean isOptimized();
 
     /**
-     * Prepare a {@link DataHandler} for serialization without using the {@link BlobWriter}
+     * Prepare a {@link Blob} for serialization without using the {@link BlobWriter}
      * API. The method first determines whether the binary data represented by the
-     * {@link DataHandler} should be optimized or inlined. If the data should not be optimized, then
+     * {@link Blob} should be optimized or inlined. If the data should not be optimized, then
      * the method returns <code>null</code> and the caller is expected to use
      * {@link #writeCharacters(String)} or {@link #writeCharacters(char[], int, int)} to write the
      * base64 encoded data to the stream. If the data should be optimized, then the method returns a
@@ -77,12 +76,12 @@ public abstract class MTOMXMLStreamWriter implements XMLStreamWriter {
      * should be used to write base64Binary values and the application code should never generate
      * {@code xop:Include} elements itself.
      * 
-     * @param dataHandler
-     *            the {@link DataHandler} that the caller intends to write to the stream
+     * @param blob
+     *            the {@link Blob} that the caller intends to write to the stream
      * @return the content ID that the caller must use in the {@code xop:Include} element or
      *         <code>null</code> if the base64 encoded data should not be optimized
      */
-    public abstract String prepareDataHandler(DataHandler dataHandler);
+    public abstract String prepareBlob(Blob blob);
 
     /**
      * Returns the character set encoding scheme. If the value of the charSetEncoding is not set
diff --git a/axiom-jaxb/src/main/java/org/apache/axiom/om/ds/jaxb/AttachmentMarshallerImpl.java b/axiom-jaxb/src/main/java/org/apache/axiom/om/ds/jaxb/AttachmentMarshallerImpl.java
index cf63dca35..98a8521a7 100644
--- a/axiom-jaxb/src/main/java/org/apache/axiom/om/ds/jaxb/AttachmentMarshallerImpl.java
+++ b/axiom-jaxb/src/main/java/org/apache/axiom/om/ds/jaxb/AttachmentMarshallerImpl.java
@@ -24,6 +24,7 @@ import javax.xml.bind.attachment.AttachmentMarshaller;
 import org.apache.axiom.blob.Blobs;
 import org.apache.axiom.om.impl.MTOMXMLStreamWriter;
 import org.apache.axiom.util.activation.BlobDataSource;
+import org.apache.axiom.util.activation.DataHandlerUtils;
 
 final class AttachmentMarshallerImpl extends AttachmentMarshaller {
     private final MTOMXMLStreamWriter out;
@@ -40,7 +41,7 @@ final class AttachmentMarshallerImpl extends AttachmentMarshaller {
     @Override
     public String addMtomAttachment(DataHandler data, String elementNamespace,
             String elementLocalName) {
-        return "cid:" + out.prepareDataHandler(data);
+        return "cid:" + out.prepareBlob(DataHandlerUtils.toBlob(data));
     }
 
     @Override
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/MTOMXMLStreamWriterImpl.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/MTOMXMLStreamWriterImpl.java
index 9b3ea1075..7f4bf293a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/MTOMXMLStreamWriterImpl.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/MTOMXMLStreamWriterImpl.java
@@ -21,11 +21,11 @@ package org.apache.axiom.om.impl.stream.ds;
 
 import java.io.OutputStream;
 
-import javax.activation.DataHandler;
 import javax.xml.namespace.NamespaceContext;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 
+import org.apache.axiom.blob.Blob;
 import org.apache.axiom.core.stream.DocumentElementExtractingFilterHandler;
 import org.apache.axiom.core.stream.NamespaceRepairingFilterHandler;
 import org.apache.axiom.core.stream.StreamException;
@@ -249,11 +249,11 @@ final class MTOMXMLStreamWriterImpl extends MTOMXMLStreamWriter {
     }
 
     @Override
-    public String prepareDataHandler(DataHandler dataHandler) {
+    public String prepareBlob(Blob blob) {
         XmlHandler handler = getHandler();
         while (handler instanceof XmlHandlerWrapper) {
             if (handler instanceof XOPHandler) {
-                return ((XOPHandler) handler).prepareDataHandler(dataHandler);
+                return ((XOPHandler) handler).prepareBlob(blob);
             }
             handler = ((XmlHandlerWrapper) handler).getParent();
         }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceXOPHandler.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceXOPHandler.java
index 980d249b8..6580b7759 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceXOPHandler.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/ds/PushOMDataSourceXOPHandler.java
@@ -21,37 +21,35 @@ package org.apache.axiom.om.impl.stream.ds;
 import java.util.HashMap;
 import java.util.Map;
 
-import javax.activation.DataHandler;
-
+import org.apache.axiom.blob.Blob;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
 import org.apache.axiom.core.stream.xop.AbstractXOPDecodingFilterHandler;
 import org.apache.axiom.om.impl.intf.TextContent;
 import org.apache.axiom.om.impl.stream.xop.XOPHandler;
 import org.apache.axiom.util.UIDGenerator;
-import org.apache.axiom.util.activation.DataHandlerUtils;
 
 final class PushOMDataSourceXOPHandler extends AbstractXOPDecodingFilterHandler
         implements XOPHandler {
-    private final Map<String, DataHandler> dataHandlers = new HashMap<String, DataHandler>();
+    private final Map<String, Blob> blobs = new HashMap<>();
 
     PushOMDataSourceXOPHandler(XmlHandler parent) {
         super(parent);
     }
 
     @Override
-    public String prepareDataHandler(DataHandler dataHandler) {
+    public String prepareBlob(Blob blob) {
         String contentID = UIDGenerator.generateContentId();
-        dataHandlers.put(contentID, dataHandler);
+        blobs.put(contentID, blob);
         return contentID;
     }
 
     @Override
     protected Object buildCharacterData(String contentID) throws StreamException {
-        DataHandler dataHandler = dataHandlers.get(contentID);
-        if (dataHandler == null) {
-            throw new StreamException("No DataHandler found for content ID " + contentID);
+        Blob blob = blobs.get(contentID);
+        if (blob == null) {
+            throw new StreamException("No Blob found for content ID " + contentID);
         }
-        return new TextContent(contentID, DataHandlerUtils.toBlob(dataHandler), true);
+        return new TextContent(contentID, blob, true);
     }
 }
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPEncodingFilterHandler.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPEncodingFilterHandler.java
index 14f0c305c..00826519b 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPEncodingFilterHandler.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPEncodingFilterHandler.java
@@ -24,8 +24,6 @@ import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
-import javax.activation.DataHandler;
-
 import org.apache.axiom.blob.Blob;
 import org.apache.axiom.core.stream.StreamException;
 import org.apache.axiom.core.stream.XmlHandler;
@@ -52,16 +50,16 @@ public final class XOPEncodingFilterHandler extends AbstractXOPEncodingFilterHan
     }
 
     @Override
-    public String prepareDataHandler(DataHandler dataHandler) {
+    public String prepareBlob(Blob blob) {
         boolean doOptimize;
         try {
-            doOptimize = optimizationPolicy.isOptimized(dataHandler, true);
+            doOptimize = optimizationPolicy.isOptimized(DataHandlerUtils.toDataHandler(blob), true);
         } catch (IOException ex) {
             doOptimize = true;
         }
         if (doOptimize) {
             String contentID = contentIDGenerator.generateContentID(null);
-            blobObjects.put(contentID, DataHandlerUtils.toBlob(dataHandler));
+            blobObjects.put(contentID, blob);
             return contentID;
         } else {
             return null;
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPHandler.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPHandler.java
index 6d9c41a98..e85ccd4b2 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPHandler.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/stream/xop/XOPHandler.java
@@ -18,8 +18,8 @@
  */
 package org.apache.axiom.om.impl.stream.xop;
 
-import javax.activation.DataHandler;
+import org.apache.axiom.blob.Blob;
 
 public interface XOPHandler {
-    String prepareDataHandler(DataHandler dataHandler);
+    String prepareBlob(Blob blob);
 }