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);
     }
 
     /**