You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ri...@apache.org on 2008/06/20 22:15:22 UTC

svn commit: r670051 - in /geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet: MimeBodyPart.java MimeMessage.java MimeMultipart.java

Author: rickmcguire
Date: Fri Jun 20 13:15:22 2008
New Revision: 670051

URL: http://svn.apache.org/viewvc?rev=670051&view=rev
Log:
GERONIMO-4134 boundary attribute for multipart/related content does not have surrounding quotes

Fix for problems unconvered by the James test suite. 


Modified:
    geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeBodyPart.java
    geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMessage.java
    geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMultipart.java

Modified: geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeBodyPart.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeBodyPart.java?rev=670051&r1=670050&r2=670051&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeBodyPart.java (original)
+++ geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeBodyPart.java Fri Jun 20 13:15:22 2008
@@ -527,6 +527,9 @@
             String type = dh.getContentType();
             // parse this content type out so we can do matches/compares.
             ContentType content = new ContentType(type);
+            
+            // we might need to reconcile the content type and our explicitly set type
+            String explicitType = getSingleHeader("Content-Type"); 
             // is this a multipart content?
             if (content.match("multipart/*")) {
                 // the content is suppose to be a MimeMultipart.  Ping it to update it's headers as well.
@@ -545,7 +548,7 @@
                 }
 
                 // is a content type header set?  Check the property to see if we need to set this.
-                if (getHeader("Content-Type") == null) {
+                if (explicitType == null) {
                     if (SessionUtil.getBooleanProperty(MIME_SETDEFAULTTEXTCHARSET, true)) {
                         // is this a text type?  Figure out the encoding and make sure it is set.
                         if (content.match("text/*")) {
@@ -563,6 +566,8 @@
                                     // get the global default.
                                     content.setParameter("charset", MimeUtility.getDefaultMIMECharset());
                                 }
+                                // replace the datasource provided type 
+                                type = content.toString(); 
                             }
                         }
                     }
@@ -570,7 +575,7 @@
             }
 
             // if we don't have a content type header, then create one.
-            if (getSingleHeader("Content-Type") == null) {
+            if (explicitType == null) {
                 // get the disposition header, and if it is there, copy the filename parameter into the
                 // name parameter of the type.
                 String disp = getHeader("Content-Disposition", null);
@@ -582,10 +587,12 @@
                     // copy and rename the parameter, if it exists.
                     if (filename != null) {
                         content.setParameter("name", filename);
+                        // and update the string version 
+                        type = content.toString(); 
                     }
                 }
                 // set the header with the updated content type information.
-                setHeader("Content-Type", content.toString());
+                setHeader("Content-Type", type);
             }
 
         } catch (IOException e) {

Modified: geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMessage.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMessage.java?rev=670051&r1=670050&r2=670051&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMessage.java (original)
+++ geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMessage.java Fri Jun 20 13:15:22 2008
@@ -1362,6 +1362,8 @@
         try {
             // figure out the content type.  If not set, we'll need to figure this out.
             String type = dh.getContentType();
+            // we might need to reconcile the content type and our explicitly set type
+            String explicitType = getSingleHeader("Content-Type"); 
             // parse this content type out so we can do matches/compares.
             ContentType content = new ContentType(type);
 
@@ -1383,7 +1385,7 @@
                 }
 
                 // is a content type header set?  Check the property to see if we need to set this.
-                if (getSingleHeader("Content-Type") == null) {
+                if (explicitType == null) {
                     if (SessionUtil.getBooleanProperty(session, "MIME_MAIL_SETDEFAULTTEXTCHARSET", true)) {
                         // is this a text type?  Figure out the encoding and make sure it is set.
                         if (content.match("text/*")) {
@@ -1401,6 +1403,8 @@
                                     // get the global default.
                                     content.setParameter("charset", MimeUtility.getDefaultMIMECharset());
                                 }
+                                // replace the original type string 
+                                type = content.toString(); 
                             }
                         }
                     }
@@ -1408,7 +1412,7 @@
             }
 
             // if we don't have a content type header, then create one.
-            if (getSingleHeader("Content-Type") == null) {
+            if (explicitType == null) {
                 // get the disposition header, and if it is there, copy the filename parameter into the
                 // name parameter of the type.
                 String disp = getSingleHeader("Content-Disposition");
@@ -1420,10 +1424,13 @@
                     // copy and rename the parameter, if it exists.
                     if (filename != null) {
                         content.setParameter("name", filename);
+                        // set the header with the updated content type information.
+                        type = content.toString();
                     }
                 }
-                // set the header with the updated content type information.
-                setHeader("Content-Type", content.toString());
+                // if no header has been set, then copy our current type string (which may 
+                // have been modified above) 
+                setHeader("Content-Type", type); 
             }
 
             // new javamail 1.4 requirement.

Modified: geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMultipart.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMultipart.java?rev=670051&r1=670050&r2=670051&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMultipart.java (original)
+++ geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/internet/MimeMultipart.java Fri Jun 20 13:15:22 2008
@@ -91,8 +91,12 @@
             super.setMultipartDataSource((MultipartDataSource) dataSource);
             parsed = true;
         } else {
-            type = new ContentType(ds.getContentType());
-            contentType = type.toString();
+            // We keep the original, provided content type string so that we 
+            // don't end up changing quoting/formatting of the header unless 
+            // changes are made to the content type.  James is somewhat dependent 
+            // on that behavior. 
+            contentType = ds.getContentType(); 
+            type = new ContentType(contentType);
             parsed = false;
         }
     }