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 -> org.apache.axiom.attachments.ConfigurableDataHandler,
org.apache.axiom.util.base64.Base64Utils -> 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 -> org.apache.axiom.soap.SOAPFactory,
org.apache.axiom.om.OMMetaFactory -> 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();