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 2011/10/30 15:13:07 UTC
svn commit: r1195164 - in
/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom:
attachments/ mime/ mime/impl/axiom/ mime/impl/javamail/ om/impl/
Author: veithen
Date: Sun Oct 30 14:13:07 2011
New Revision: 1195164
URL: http://svn.apache.org/viewvc?rev=1195164&view=rev
Log:
AXIOM-396: Generalized this feature such that it can be used to write arbitrary MIME headers (not just Content-Disposition).
Added:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/Header.java
- copied, changed from r1195152, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Header.java
Removed:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Header.java
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/MIMEMessage.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/MultipartWriter.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/axiom/MultipartWriterImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/javamail/MultipartWriterImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/MIMEMessage.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/MIMEMessage.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/MIMEMessage.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/MIMEMessage.java Sun Oct 30 14:13:07 2011
@@ -33,6 +33,7 @@ import javax.mail.internet.ParseExceptio
import org.apache.axiom.attachments.lifecycle.LifecycleManager;
import org.apache.axiom.attachments.lifecycle.impl.LifecycleManagerImpl;
+import org.apache.axiom.mime.Header;
import org.apache.axiom.om.OMException;
import org.apache.axiom.om.util.DetachableInputStream;
import org.apache.axiom.util.UIDGenerator;
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/PartImpl.java Sun Oct 30 14:13:07 2011
@@ -20,6 +20,7 @@
package org.apache.axiom.attachments;
import org.apache.axiom.attachments.Part;
+import org.apache.axiom.mime.Header;
import org.apache.axiom.om.OMException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
Copied: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/Header.java (from r1195152, webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Header.java)
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/Header.java?p2=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/Header.java&p1=webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Header.java&r1=1195152&r2=1195164&rev=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/attachments/Header.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/Header.java Sun Oct 30 14:13:07 2011
@@ -16,9 +16,12 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.attachments;
+package org.apache.axiom.mime;
-final class Header {
+/**
+ * A MIME header.
+ */
+public final class Header {
private final String name;
private final String value;
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/MultipartWriter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/MultipartWriter.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/MultipartWriter.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/MultipartWriter.java Sun Oct 30 14:13:07 2011
@@ -21,6 +21,7 @@ package org.apache.axiom.mime;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.List;
import javax.activation.DataHandler;
@@ -68,28 +69,27 @@ public interface MultipartWriter {
*/
OutputStream writePart(String contentType, String contentTransferEncoding, String contentID)
throws IOException;
+
/**
- * Start writing a MIME part. The methods returns an {@link OutputStream} that the caller can
- * use to write the content of the MIME part. After writing the content,
- * {@link OutputStream#close()} must be called to complete the writing of the MIME part.
- *
- * @param contentType
- * the value of the <tt>Content-Type</tt> header of the MIME part
- * @param contentTransferEncoding
- * the content transfer encoding to be used (see above); must not be
- * <code>null</code>
- * @param contentID
- * the content ID of the MIME part (see above)
- * @param dispositionType
- * the disposition type of the MIME part
- * @param dispositionParm
- * a disposition parameter of the MIME part
- * @return an output stream to write the content of the MIME part
- * @throws IOException
- * if an I/O error occurs when writing to the underlying stream
- */
+ * Start writing a MIME part. The method is similar to
+ * {@link #writePart(String, String, String)} but accepts a list of additional headers for the
+ * MIME part.
+ *
+ * @param contentType
+ * the value of the <tt>Content-Type</tt> header of the MIME part
+ * @param contentTransferEncoding
+ * the content transfer encoding to be used (see above); must not be
+ * <code>null</code>
+ * @param contentID
+ * the content ID of the MIME part (see above)
+ * @param extraHeaders
+ * a list of {@link Header} objects with additional headers to write to the MIME part
+ * @return an output stream to write the content of the MIME part
+ * @throws IOException
+ * if an I/O error occurs when writing to the underlying stream
+ */
OutputStream writePart(String contentType, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) throws IOException;
+ String contentID, List/*<Header>*/ extraHeaders) throws IOException;
/**
* Write a MIME part. The content is provided by a {@link DataHandler} object, which also
@@ -107,9 +107,12 @@ public interface MultipartWriter {
*/
void writePart(DataHandler dataHandler, String contentTransferEncoding, String contentID)
throws IOException;
+
/**
* Write a MIME part. The content is provided by a {@link DataHandler} object, which also
- * specifies the content type of the part.
+ * specifies the content type of the part. The method is similar to
+ * {@link #writePart(DataHandler, String, String)} but accepts a list of additional headers for
+ * the MIME part.
*
* @param dataHandler
* the content of the MIME part to write
@@ -118,15 +121,13 @@ public interface MultipartWriter {
* <code>null</code>
* @param contentID
* the content ID of the MIME part (see above)
- * @param dispositionType
- * the disposition type of the MIME part
- * @param dispositionParm
- * a disposition parameter of the MIME part
+ * @param extraHeaders
+ * a list of {@link Header} objects with additional headers to write to the MIME part
* @throws IOException
* if an I/O error occurs when writing the part to the underlying stream
*/
void writePart(DataHandler dataHandler, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) throws IOException;
+ String contentID, List/*<Header>*/ extraHeaders) throws IOException;
/**
* Complete writing of the MIME multipart package. This method does <b>not</b> close the
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/axiom/MultipartWriterImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/axiom/MultipartWriterImpl.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/axiom/MultipartWriterImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/axiom/MultipartWriterImpl.java Sun Oct 30 14:13:07 2011
@@ -20,9 +20,12 @@ package org.apache.axiom.mime.impl.axiom
import java.io.IOException;
import java.io.OutputStream;
+import java.util.Iterator;
+import java.util.List;
import javax.activation.DataHandler;
+import org.apache.axiom.mime.Header;
import org.apache.axiom.mime.MultipartWriter;
import org.apache.axiom.util.base64.Base64EncodingOutputStream;
@@ -82,7 +85,7 @@ class MultipartWriterImpl implements Mul
}
public OutputStream writePart(String contentType, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) throws IOException {
+ String contentID, List/*<Header>*/ extraHeaders) throws IOException {
OutputStream transferEncoder;
if (contentTransferEncoding.equals("8bit") || contentTransferEncoding.equals("binary")) {
transferEncoder = out;
@@ -106,12 +109,14 @@ class MultipartWriterImpl implements Mul
writeAscii(contentID);
out.write('>');
}
-
- if (dispositionType != null && dispositionParm != null) {
- writeAscii("\r\nContent-Disposition: ");
- writeAscii(dispositionType);
- writeAscii("; ");
- writeAscii(dispositionParm);
+ if (extraHeaders != null) {
+ for (Iterator it = extraHeaders.iterator(); it.hasNext(); ) {
+ Header header = (Header)it.next();
+ writeAscii("\r\n");
+ writeAscii(header.getName());
+ writeAscii(": ");
+ writeAscii(header.getValue());
+ }
}
writeAscii("\r\n\r\n");
return new PartOutputStream(transferEncoder);
@@ -119,19 +124,19 @@ class MultipartWriterImpl implements Mul
public OutputStream writePart(String contentType, String contentTransferEncoding,
String contentID) throws IOException {
- return writePart(contentType, contentTransferEncoding, contentID, null, null);
+ return writePart(contentType, contentTransferEncoding, contentID, null);
}
- public void writePart(DataHandler dataHandler, String contentTransferEncoding, String contentID,String dispositionType, String dispositionParm)
+ public void writePart(DataHandler dataHandler, String contentTransferEncoding, String contentID, List/*<Header>*/ extraHeaders)
throws IOException {
- OutputStream partOutputStream = writePart(dataHandler.getContentType(), contentTransferEncoding, contentID, dispositionType, dispositionParm);
+ OutputStream partOutputStream = writePart(dataHandler.getContentType(), contentTransferEncoding, contentID, extraHeaders);
dataHandler.writeTo(partOutputStream);
partOutputStream.close();
}
public void writePart(DataHandler dataHandler, String contentTransferEncoding,
String contentID) throws IOException {
- writePart(dataHandler, contentTransferEncoding, contentID, null, null);
+ writePart(dataHandler, contentTransferEncoding, contentID, null);
}
public void complete() throws IOException {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/javamail/MultipartWriterImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/javamail/MultipartWriterImpl.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/javamail/MultipartWriterImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/mime/impl/javamail/MultipartWriterImpl.java Sun Oct 30 14:13:07 2011
@@ -22,11 +22,14 @@ package org.apache.axiom.mime.impl.javam
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
+import java.util.Iterator;
+import java.util.List;
import javax.activation.DataHandler;
import javax.mail.MessagingException;
import javax.mail.internet.MimeBodyPart;
+import org.apache.axiom.mime.Header;
import org.apache.axiom.mime.MultipartWriter;
import org.apache.axiom.util.blob.BlobDataSource;
import org.apache.axiom.util.blob.MemoryBlob;
@@ -42,18 +45,16 @@ class MultipartWriterImpl implements Mul
private final String contentID;
private final WritableBlob blob;
private final OutputStream parent;
- private final String dispositionType;
- private final String dispositionParm;
+ private final List/*<Header>*/ extraHeaders;
public PartOutputStream(String contentType, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) {
+ String contentID, List/*<Header>*/ extraHeaders) {
this.contentType = contentType;
this.contentTransferEncoding = contentTransferEncoding;
this.contentID = contentID;
+ this.extraHeaders = extraHeaders;
blob = new MemoryBlob();
parent = blob.getOutputStream();
- this.dispositionType = dispositionType;
- this.dispositionParm = dispositionParm;
}
public void write(int b) throws IOException {
@@ -71,7 +72,7 @@ class MultipartWriterImpl implements Mul
public void close() throws IOException {
parent.close();
writePart(new DataHandler(new BlobDataSource(blob, contentType)),
- contentTransferEncoding, contentID, dispositionType, dispositionParm);
+ contentTransferEncoding, contentID, extraHeaders);
}
}
@@ -90,17 +91,17 @@ class MultipartWriterImpl implements Mul
public OutputStream writePart(String contentType, String contentTransferEncoding,
String contentID) throws IOException {
- return new PartOutputStream(contentType, contentTransferEncoding, contentID, null, null);
+ return new PartOutputStream(contentType, contentTransferEncoding, contentID, null);
}
public OutputStream writePart(String contentType, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) throws IOException {
+ String contentID, List/*<Header>*/ extraHeaders) throws IOException {
return new PartOutputStream(contentType, contentTransferEncoding, contentID,
- dispositionType, dispositionParm);
+ extraHeaders);
}
public void writePart(DataHandler dataHandler, String contentTransferEncoding,
- String contentID, String dispositionType, String dispositionParm) throws IOException {
+ String contentID, List/*<Header>*/ extraHeaders) throws IOException {
MimeBodyPart mimeBodyPart = new MimeBodyPart();
try {
mimeBodyPart.setDataHandler(dataHandler);
@@ -108,11 +109,12 @@ class MultipartWriterImpl implements Mul
mimeBodyPart.addHeader("Content-Type", dataHandler.getContentType());
mimeBodyPart.addHeader("Content-Transfer-Encoding", contentTransferEncoding);
mimeBodyPart.addHeader("Content-Transfer-Encoding", contentTransferEncoding);
- if (dispositionType != null && dispositionParm != null) {
- mimeBodyPart.addHeader("Content-Disposition", dispositionType + "; "
- + dispositionParm);
+ if (extraHeaders != null) {
+ for (Iterator it = extraHeaders.iterator(); it.hasNext(); ) {
+ Header header = (Header)it.next();
+ mimeBodyPart.addHeader(header.getName(), header.getValue());
+ }
}
-
} catch (MessagingException ex) {
IOException ex2 = new IOException("Unable to create MimeBodyPart");
ex2.initCause(ex);
@@ -133,7 +135,7 @@ class MultipartWriterImpl implements Mul
public void writePart(DataHandler dataHandler, String contentTransferEncoding, String contentID)
throws IOException {
- writePart(dataHandler, contentTransferEncoding, contentID, null, null);
+ writePart(dataHandler, contentTransferEncoding, contentID, null);
}
public void complete() throws IOException {
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java?rev=1195164&r1=1195163&r2=1195164&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/OMMultipartWriter.java Sun Oct 30 14:13:07 2011
@@ -21,10 +21,12 @@ package org.apache.axiom.om.impl;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.List;
import javax.activation.DataHandler;
import org.apache.axiom.attachments.ConfigurableDataHandler;
+import org.apache.axiom.mime.Header;
import org.apache.axiom.mime.MultipartWriter;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axiom.om.util.CommonUtils;
@@ -115,42 +117,38 @@ public class OMMultipartWriter {
/**
* Start writing an attachment part of the MIME package. This method delegates to
- * {@link MultipartWriter#writePart(String, String, String)}, but computes the content transfer
- * encoding based on the content type and the {@link OMOutputFormat}.
+ * {@link MultipartWriter#writePart(String, String, String, List)}, but computes the content
+ * transfer encoding based on the content type and the {@link OMOutputFormat}.
*
* @param contentType
* the content type of the MIME part to write
* @param contentID
* the content ID of the MIME part
- * @param dispositionType
- * the disposition type of the MIME part
- * @param dispositionParm
- * a disposition parameter of the MIME part
+ * @param extraHeaders
+ * a list of {@link Header} objects with additional headers to write to the MIME part
* @return an output stream to write the content of the MIME part
* @throws IOException
* if an I/O error occurs when writing to the underlying stream
*/
- public OutputStream writePart(String contentType, String contentID, String dispositionType, String dispositionParm) throws IOException {
- return writer.writePart(contentType, getContentTransferEncoding(contentType), contentID, dispositionType, dispositionParm);
+ public OutputStream writePart(String contentType, String contentID, List/*<Header>*/ extraHeaders) throws IOException {
+ return writer.writePart(contentType, getContentTransferEncoding(contentType), contentID, extraHeaders);
}
/**
* Write a MIME part. This method delegates to
- * {@link MultipartWriter#writePart(DataHandler, String, String)}, but computes the appropriate
- * content transfer encoding from the {@link OMOutputFormat}.
+ * {@link MultipartWriter#writePart(DataHandler, String, String, List)}, but computes the
+ * appropriate content transfer encoding from the {@link OMOutputFormat}.
*
* @param dataHandler
* the content of the MIME part to write
* @param contentID
* the content ID of the MIME part
- * @param dispositionType
- * the disposition type of the MIME part
- * @param dispositionParm
- * a disposition parameter of the MIME part
+ * @param extraHeaders
+ * a list of {@link Header} objects with additional headers to write to the MIME part
* @throws IOException
* if an I/O error occurs when writing the part to the underlying stream
*/
- public void writePart(DataHandler dataHandler, String contentID, String dispositionType, String dispositionParm) throws IOException {
+ public void writePart(DataHandler dataHandler, String contentID, List/*<Header>*/ extraHeaders) throws IOException {
String contentTransferEncoding = null;
if (dataHandler instanceof ConfigurableDataHandler) {
contentTransferEncoding = ((ConfigurableDataHandler)dataHandler).getTransferEncoding();
@@ -158,7 +156,7 @@ public class OMMultipartWriter {
if (contentTransferEncoding == null) {
contentTransferEncoding = getContentTransferEncoding(dataHandler.getContentType());
}
- writer.writePart(dataHandler, contentTransferEncoding, contentID, dispositionType, dispositionParm);
+ writer.writePart(dataHandler, contentTransferEncoding, contentID, extraHeaders);
}
/**
@@ -174,7 +172,7 @@ public class OMMultipartWriter {
* if an I/O error occurs when writing the part to the underlying stream
*/
public void writePart(DataHandler dataHandler, String contentID) throws IOException {
- writePart(dataHandler, contentID, null, null);
+ writePart(dataHandler, contentID, null);
}
/**