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 0d5a278af [AXIOM-506] Make the ContentTransferEncodingPolicy configurable in OMOutputFormat 0d5a278af is described below commit 0d5a278afa4cd2bac291b3544cbd1c6ab27f89e7 Author: Andreas Veithen <andreas.veit...@gmail.com> AuthorDate: Wed Nov 9 00:45:49 2022 +0000 [AXIOM-506] Make the ContentTransferEncodingPolicy configurable in OMOutputFormat --- axiom-api/pom.xml | 1 - .../java/org/apache/axiom/om/OMOutputFormat.java | 26 +++++++++++++--------- .../apache/axiom/om/impl/OMMultipartWriter.java | 14 ++++++++---- 3 files changed, 26 insertions(+), 15 deletions(-) diff --git a/axiom-api/pom.xml b/axiom-api/pom.xml index e44b51d69..f2aa1c667 100644 --- a/axiom-api/pom.xml +++ b/axiom-api/pom.xml @@ -286,7 +286,6 @@ <!-- Bad API design: a public API shouldn't depend on classes in an impl package in its interface --> org.apache.axiom.attachments.lifecycle.LifecycleManager -> org.apache.axiom.attachments.lifecycle.impl.FileAccessor, <!-- 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.util.base64.Base64Utils -> javax.activation.DataSource, org.apache.axiom.util.base64.Base64Utils -> javax.activation.DataHandler, diff --git a/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java b/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java index 5d216b303..65eb96137 100644 --- a/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java +++ b/axiom-api/src/main/java/org/apache/axiom/om/OMOutputFormat.java @@ -22,6 +22,7 @@ package org.apache.axiom.om; import java.util.HashMap; import java.util.Map; +import org.apache.axiom.om.format.xop.ContentTransferEncodingPolicy; import org.apache.axiom.om.impl.MTOMConstants; import org.apache.axiom.om.util.StAXWriterConfiguration; import org.apache.axiom.soap.SOAPVersion; @@ -70,16 +71,11 @@ public class OMOutputFormat { @SuppressWarnings("deprecation") private StAXWriterConfiguration writerConfiguration; - // The value of this property is a Boolean. - // A missing value indicates the default action, which is Boolean.FALSE - // If Boolean.TRUE, attachments that are "non textual" are written out with - // a content-transfer-encoding type of base64. - // @See CommonUtils.isTextualPart for the textual part definition. - // - // Example: - // An attachment with a content-type of "image/gif" is a non-textual attachment. - // An attachment with a content-type of "application/soap+xml" is an textual attachment - // + private ContentTransferEncodingPolicy contentTransferEncodingPolicy; + + /** + * @deprecated Use {@link ContentTransferEncodingPolicy#USE_BASE64_FOR_NON_TEXTUAL_PARTS} instead. + */ public static final String USE_CTE_BASE64_FOR_NON_TEXTUAL_ATTACHMENTS = "org.apache.axiom.om.OMFormat.use.cteBase64.forNonTextualAttachments"; @@ -125,6 +121,7 @@ public class OMOutputFormat { ignoreXMLDeclaration = format.ignoreXMLDeclaration; autoCloseWriter = format.autoCloseWriter; writerConfiguration = format.writerConfiguration; + contentTransferEncodingPolicy = format.contentTransferEncodingPolicy; if (format.map != null) { map = new HashMap<String,Object>(format.map); } @@ -474,4 +471,13 @@ public class OMOutputFormat { public void setStAXWriterConfiguration(StAXWriterConfiguration writerConfiguration) { this.writerConfiguration = writerConfiguration; } + + public ContentTransferEncodingPolicy getContentTransferEncodingPolicy() { + return contentTransferEncodingPolicy; + } + + public void setContentTransferEncodingPolicy( + ContentTransferEncodingPolicy contentTransferEncodingPolicy) { + this.contentTransferEncodingPolicy = contentTransferEncodingPolicy; + } } 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 c0d2a9a1c..4c4161fae 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 @@ -23,7 +23,6 @@ import java.io.IOException; import java.io.OutputStream; import java.util.List; -import org.apache.axiom.attachments.ConfigurableDataHandler; import org.apache.axiom.blob.Blob; import org.apache.axiom.mime.ContentTransferEncoding; import org.apache.axiom.mime.ContentType; @@ -58,10 +57,14 @@ public class OMMultipartWriter { // TODO(AXIOM-506): make this configurable in OMOutputFormat contentTypeProvider = DataHandlerContentTypeProvider.INSTANCE; - ContentTransferEncodingPolicy contentTransferEncodingPolicy = ConfigurableDataHandler.CONTENT_TRANSFER_ENCODING_POLICY; + ContentTransferEncodingPolicy contentTransferEncodingPolicy = format.getContentTransferEncodingPolicy(); if (format != null && Boolean.TRUE.equals( format.getProperty(OMOutputFormat.USE_CTE_BASE64_FOR_NON_TEXTUAL_ATTACHMENTS))) { - contentTransferEncodingPolicy = new CombinedContentTransferEncodingPolicy(contentTransferEncodingPolicy, ContentTransferEncodingPolicy.USE_BASE64_FOR_NON_TEXTUAL_PARTS); + if (contentTransferEncodingPolicy == null) { + contentTransferEncodingPolicy = ContentTransferEncodingPolicy.USE_BASE64_FOR_NON_TEXTUAL_PARTS; + } else { + contentTransferEncodingPolicy = new CombinedContentTransferEncodingPolicy(contentTransferEncodingPolicy, ContentTransferEncodingPolicy.USE_BASE64_FOR_NON_TEXTUAL_PARTS); + } } this.contentTransferEncodingPolicy = contentTransferEncodingPolicy; @@ -86,7 +89,10 @@ public class OMMultipartWriter { } private ContentTransferEncoding getContentTransferEncoding(Blob blob, ContentType contentType) { - ContentTransferEncoding cte = contentTransferEncodingPolicy.getContentTransferEncoding(blob, contentType); + ContentTransferEncoding cte = null; + if (contentTransferEncodingPolicy != null) { + cte = contentTransferEncodingPolicy.getContentTransferEncoding(blob, contentType); + } return cte == null ? ContentTransferEncoding.BINARY : cte; }