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/05 18:32:15 UTC

[ws-axiom] branch master updated: [AXIOM-506] Decouple org.apache.axiom.mime from the DataHandler API

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 b3b25b505 [AXIOM-506] Decouple org.apache.axiom.mime from the DataHandler API
b3b25b505 is described below

commit b3b25b50552d7c60ec3b572cd106426dd269e36d
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Sat Nov 5 18:32:05 2022 +0000

    [AXIOM-506] Decouple org.apache.axiom.mime from the DataHandler API
---
 axiom-api/pom.xml                                  |  1 -
 .../axiom/attachments/LegacyPartDataHandler.java   |  2 +-
 .../java/org/apache/axiom/mime/BlobFactory.java    | 25 ++++++++++++++--
 .../DataHandlerBlobFactory.java}                   | 33 ++++++++++++----------
 .../mime/{ => activation}/PartDataHandler.java     |  3 +-
 .../mime/{ => activation}/PartDataSource.java      |  3 +-
 .../apache/axiom/mime/{ => activation}/Util.java   |  5 +++-
 .../axiom/om/impl/mixin/AxiomContainerMixin.java   |  2 +-
 .../apache/axiom/om/impl/mixin/AxiomTextMixin.java |  2 +-
 .../java/org/apache/axiom/samples/MTOMSample.java  |  4 ++-
 .../org/apache/axiom/ts/om/xop/TestSerialize.java  |  2 ++
 .../soap12/envelope/TestBuildWithAttachments.java  |  2 ++
 .../soap12/envelope/TestMTOMForwardStreaming.java  |  5 +++-
 13 files changed, 62 insertions(+), 27 deletions(-)

diff --git a/axiom-api/pom.xml b/axiom-api/pom.xml
index 3aee21bce..6de2c96cb 100644
--- a/axiom-api/pom.xml
+++ b/axiom-api/pom.xml
@@ -256,7 +256,6 @@
                                 <!-- TODO(AXIOM-506) -->
                                 org.apache.axiom.om.impl.OMMultipartWriter -&gt; org.apache.axiom.attachments.ConfigurableDataHandler,
                                 org.apache.axiom.util.base64.Base64Utils -&gt; org.apache.axiom.util.activation.DataSourceUtils,
-                                org.apache.axiom.mime.BlobFactory$1 -> org.apache.axiom.util.activation.DataHandlerUtils,
                                 <!-- 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/attachments/LegacyPartDataHandler.java b/axiom-api/src/main/java/org/apache/axiom/attachments/LegacyPartDataHandler.java
index a23557af1..7d6b8da84 100644
--- a/axiom-api/src/main/java/org/apache/axiom/attachments/LegacyPartDataHandler.java
+++ b/axiom-api/src/main/java/org/apache/axiom/attachments/LegacyPartDataHandler.java
@@ -27,7 +27,7 @@ import javax.activation.DataSource;
 import org.apache.axiom.attachments.lifecycle.DataHandlerExt;
 import org.apache.axiom.blob.Blob;
 import org.apache.axiom.mime.Part;
-import org.apache.axiom.mime.PartDataHandler;
+import org.apache.axiom.mime.activation.PartDataHandler;
 
 final class LegacyPartDataHandler extends PartDataHandler implements DataHandlerExt {
     LegacyPartDataHandler(Part part, Supplier<Blob> contentSupplier) {
diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/BlobFactory.java b/axiom-api/src/main/java/org/apache/axiom/mime/BlobFactory.java
index 382df4083..53caa05db 100644
--- a/axiom-api/src/main/java/org/apache/axiom/mime/BlobFactory.java
+++ b/axiom-api/src/main/java/org/apache/axiom/mime/BlobFactory.java
@@ -18,10 +18,13 @@
  */
 package org.apache.axiom.mime;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.util.function.Supplier;
 
 import org.apache.axiom.blob.Blob;
-import org.apache.axiom.util.activation.DataHandlerUtils;
+import org.apache.axiom.ext.io.StreamCopyException;
 
 /**
  * Factory for the {@link Blob} instances returned by {@link Part#getBlob()}. This may be used to
@@ -30,12 +33,28 @@ import org.apache.axiom.util.activation.DataHandlerUtils;
  */
 public interface BlobFactory {
     /**
-     * Default factory that creates {@link PartDataHandler} instances.
+     * Default factory that creates {@link Blob} instances that lazily access the underlying
+     * content.
      */
     BlobFactory DEFAULT = new BlobFactory() {
         @Override
         public Blob createBlob(Part part, Supplier<Blob> contentSupplier) {
-            return DataHandlerUtils.toBlob(new PartDataHandler(part, contentSupplier));
+            return new Blob() {
+                @Override
+                public InputStream getInputStream() throws IOException {
+                    return contentSupplier.get().getInputStream();
+                }
+                
+                @Override
+                public void writeTo(OutputStream out) throws StreamCopyException {
+                    contentSupplier.get().writeTo(out);
+                }
+                
+                @Override
+                public long getSize() {
+                    return contentSupplier.get().getSize();
+                }
+            };
         }
     };
 
diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/Util.java b/axiom-api/src/main/java/org/apache/axiom/mime/activation/DataHandlerBlobFactory.java
similarity index 52%
copy from axiom-api/src/main/java/org/apache/axiom/mime/Util.java
copy to axiom-api/src/main/java/org/apache/axiom/mime/activation/DataHandlerBlobFactory.java
index 985691716..3f41a2476 100644
--- a/axiom-api/src/main/java/org/apache/axiom/mime/Util.java
+++ b/axiom-api/src/main/java/org/apache/axiom/mime/activation/DataHandlerBlobFactory.java
@@ -16,23 +16,26 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.mime;
+package org.apache.axiom.mime.activation;
 
-import javax.activation.DataSource;
+import java.util.function.Supplier;
 
-final class Util {
-    private Util() {}
+import org.apache.axiom.blob.Blob;
+import org.apache.axiom.mime.BlobFactory;
+import org.apache.axiom.mime.Part;
+import org.apache.axiom.util.activation.DataHandlerUtils;
 
-    /**
-     * Get the content type that should be reported by {@link DataSource} instances created for a
-     * given part.
-     * 
-     * @param Part
-     *            the part
-     * @return the content type
-     */
-    static String getDataSourceContentType(Part part) {
-        String ct = part.getHeader(Header.CONTENT_TYPE);
-        return ct == null ? "application/octet-stream" : ct;
+/**
+ * {@link BlobFactory} implementation that creates {@link Blob} instances that wrap
+ * {@link PartDataHandler} instances.
+ */
+public final class DataHandlerBlobFactory implements BlobFactory {
+    public static final DataHandlerBlobFactory INSTANCE = new DataHandlerBlobFactory();
+
+    private DataHandlerBlobFactory() {}
+
+    @Override
+    public Blob createBlob(Part part, Supplier<Blob> contentSupplier) {
+        return DataHandlerUtils.toBlob(new PartDataHandler(part, contentSupplier));
     }
 }
diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/PartDataHandler.java b/axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataHandler.java
similarity index 98%
rename from axiom-api/src/main/java/org/apache/axiom/mime/PartDataHandler.java
rename to axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataHandler.java
index afe1cdf29..4fef99f16 100644
--- a/axiom-api/src/main/java/org/apache/axiom/mime/PartDataHandler.java
+++ b/axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataHandler.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.mime;
+package org.apache.axiom.mime.activation;
 
 import java.io.IOException;
 import java.io.OutputStream;
@@ -26,6 +26,7 @@ import javax.activation.DataHandler;
 import javax.activation.DataSource;
 
 import org.apache.axiom.blob.Blob;
+import org.apache.axiom.mime.Part;
 
 /**
  * {@link DataHandler} implementation for MIME parts read from a stream.
diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/PartDataSource.java b/axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataSource.java
similarity index 96%
rename from axiom-api/src/main/java/org/apache/axiom/mime/PartDataSource.java
rename to axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataSource.java
index e67176d75..facac683c 100644
--- a/axiom-api/src/main/java/org/apache/axiom/mime/PartDataSource.java
+++ b/axiom-api/src/main/java/org/apache/axiom/mime/activation/PartDataSource.java
@@ -16,7 +16,7 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.mime;
+package org.apache.axiom.mime.activation;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -25,6 +25,7 @@ import java.util.function.Supplier;
 
 import org.apache.axiom.blob.Blob;
 import org.apache.axiom.ext.activation.SizeAwareDataSource;
+import org.apache.axiom.mime.Part;
 
 /**
  * Default {@link DataSource} implementation for MIME parts.
diff --git a/axiom-api/src/main/java/org/apache/axiom/mime/Util.java b/axiom-api/src/main/java/org/apache/axiom/mime/activation/Util.java
similarity index 91%
rename from axiom-api/src/main/java/org/apache/axiom/mime/Util.java
rename to axiom-api/src/main/java/org/apache/axiom/mime/activation/Util.java
index 985691716..61f007e2c 100644
--- a/axiom-api/src/main/java/org/apache/axiom/mime/Util.java
+++ b/axiom-api/src/main/java/org/apache/axiom/mime/activation/Util.java
@@ -16,10 +16,13 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.axiom.mime;
+package org.apache.axiom.mime.activation;
 
 import javax.activation.DataSource;
 
+import org.apache.axiom.mime.Header;
+import org.apache.axiom.mime.Part;
+
 final class Util {
     private Util() {}
 
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 3a02114e2..944e10faf 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
@@ -50,7 +50,7 @@ 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.PartDataHandler;
+import org.apache.axiom.mime.activation.PartDataHandler;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomTextMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomTextMixin.java
index e248b1c12..7f06fefba 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomTextMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomTextMixin.java
@@ -22,7 +22,7 @@ import javax.activation.DataHandler;
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.core.CoreModelException;
-import org.apache.axiom.mime.PartDataHandler;
+import org.apache.axiom.mime.activation.PartDataHandler;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMNamespace;
diff --git a/samples/src/test/java/org/apache/axiom/samples/MTOMSample.java b/samples/src/test/java/org/apache/axiom/samples/MTOMSample.java
index 6dae581ef..4d3921cd3 100644
--- a/samples/src/test/java/org/apache/axiom/samples/MTOMSample.java
+++ b/samples/src/test/java/org/apache/axiom/samples/MTOMSample.java
@@ -30,7 +30,8 @@ import javax.xml.ws.Endpoint;
 import junit.framework.TestCase;
 
 import org.apache.axiom.mime.MultipartBody;
-import org.apache.axiom.mime.PartDataHandler;
+import org.apache.axiom.mime.activation.DataHandlerBlobFactory;
+import org.apache.axiom.mime.activation.PartDataHandler;
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMOutputFormat;
@@ -68,6 +69,7 @@ public class MTOMSample extends TestCase {
         MultipartBody multipartBody = MultipartBody.builder()
                 .setInputStream(in)
                 .setContentType(connection.getContentType())
+                .setBlobFactory(DataHandlerBlobFactory.INSTANCE)
                 .build();
         SOAPEnvelope response = OMXMLBuilderFactory.createSOAPModelBuilder(multipartBody).getSOAPEnvelope();
         OMElement retrieveContentResponse = response.getBody().getFirstElement();
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/TestSerialize.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/TestSerialize.java
index 11613261b..c12d5909a 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/TestSerialize.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/om/xop/TestSerialize.java
@@ -22,6 +22,7 @@ import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
 
 import org.apache.axiom.mime.MultipartBody;
+import org.apache.axiom.mime.activation.DataHandlerBlobFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMOutputFormat;
@@ -50,6 +51,7 @@ public class TestSerialize extends AxiomTestCase {
                 MultipartBody.builder()
                         .setInputStream(inStream)
                         .setContentType(testMessage.getContentType())
+                        .setBlobFactory(DataHandlerBlobFactory.INSTANCE)
                         .build();
 
         OMOutputFormat oof = new OMOutputFormat();
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestBuildWithAttachments.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestBuildWithAttachments.java
index 0114c0aec..be287595e 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestBuildWithAttachments.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestBuildWithAttachments.java
@@ -22,6 +22,7 @@ import java.io.InputStream;
 import java.util.Iterator;
 
 import org.apache.axiom.mime.MultipartBody;
+import org.apache.axiom.mime.activation.DataHandlerBlobFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMText;
@@ -44,6 +45,7 @@ public class TestBuildWithAttachments extends AxiomTestCase {
                 MultipartBody.builder()
                         .setInputStream(in)
                         .setContentType(sample.getContentType())
+                        .setBlobFactory(DataHandlerBlobFactory.INSTANCE)
                         .build();
         SOAPEnvelope envelope =
                 OMXMLBuilderFactory.createSOAPModelBuilder(metaFactory, mb).getSOAPEnvelope();
diff --git a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
index 355a3a6b9..4a7348360 100644
--- a/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
+++ b/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap12/envelope/TestMTOMForwardStreaming.java
@@ -26,7 +26,8 @@ import javax.activation.DataHandler;
 import javax.activation.DataSource;
 
 import org.apache.axiom.mime.MultipartBody;
-import org.apache.axiom.mime.PartDataHandler;
+import org.apache.axiom.mime.activation.DataHandlerBlobFactory;
+import org.apache.axiom.mime.activation.PartDataHandler;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMMetaFactory;
 import org.apache.axiom.om.OMOutputFormat;
@@ -108,6 +109,7 @@ public class TestMTOMForwardStreaming extends AxiomTestCase {
                                             MultipartBody.builder()
                                                     .setInputStream(pipe1In)
                                                     .setContentType(contentType)
+                                                    .setBlobFactory(DataHandlerBlobFactory.INSTANCE)
                                                     .build();
                                     SOAPEnvelope envelope =
                                             OMXMLBuilderFactory.createSOAPModelBuilder(
@@ -136,6 +138,7 @@ public class TestMTOMForwardStreaming extends AxiomTestCase {
                     MultipartBody.builder()
                             .setInputStream(pipe2In)
                             .setContentType(contentType)
+                            .setBlobFactory(DataHandlerBlobFactory.INSTANCE)
                             .build();
             SOAPEnvelope envelope =
                     OMXMLBuilderFactory.createSOAPModelBuilder(metaFactory, mb).getSOAPEnvelope();