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