You are viewing a plain text version of this content. The canonical link for it is here.
Posted to mime4j-dev@james.apache.org by mw...@apache.org on 2009/01/27 13:01:21 UTC

svn commit: r738064 - in /james/mime4j/trunk/src: main/java/org/apache/james/mime4j/field/Fields.java test/java/org/apache/james/mime4j/field/FieldsTest.java

Author: mwiederkehr
Date: Tue Jan 27 12:01:21 2009
New Revision: 738064

URL: http://svn.apache.org/viewvc?rev=738064&view=rev
Log:
MIME4J-100: fold entire header field not only field value

Modified:
    james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
    james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java

Modified: james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java?rev=738064&r1=738063&r2=738064&view=diff
==============================================================================
--- james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java (original)
+++ james/mime4j/trunk/src/main/java/org/apache/james/mime4j/field/Fields.java Tue Jan 27 12:01:21 2009
@@ -30,6 +30,7 @@
 import java.util.Map;
 import java.util.TimeZone;
 
+import org.apache.james.mime4j.MimeException;
 import org.apache.james.mime4j.codec.EncoderUtil;
 import org.apache.james.mime4j.field.address.Address;
 import org.apache.james.mime4j.field.address.Mailbox;
@@ -41,10 +42,7 @@
     }
 
     public static ContentTypeField contentType(String contentType) {
-        int usedCharacters = Field.CONTENT_TYPE.length() + 2;
-        String body = MimeUtil.fold(contentType, usedCharacters);
-
-        return parse(ContentTypeField.class, Field.CONTENT_TYPE, body);
+        return parse(ContentTypeField.class, Field.CONTENT_TYPE, contentType);
     }
 
     public static ContentTypeField contentType(String mimeType,
@@ -96,17 +94,16 @@
     }
 
     public static Field messageId(String hostname) {
-        return Field.parse(Field.MESSAGE_ID, MimeUtil
-                .createUniqueMessageId(hostname));
+        String fieldValue = MimeUtil.createUniqueMessageId(hostname);
+        return parse(UnstructuredField.class, Field.MESSAGE_ID, fieldValue);
     }
 
     public static UnstructuredField subject(String subject) {
         int usedCharacters = Field.SUBJECT.length() + 2;
-        String encoded = EncoderUtil.encodeIfNecessary(subject,
+        String fieldValue = EncoderUtil.encodeIfNecessary(subject,
                 EncoderUtil.Usage.TEXT_TOKEN, usedCharacters);
-        String rawValue = MimeUtil.fold(encoded, usedCharacters);
 
-        return parse(UnstructuredField.class, Field.SUBJECT, rawValue);
+        return parse(UnstructuredField.class, Field.SUBJECT, fieldValue);
     }
 
     public static MailboxField sender(Mailbox mailbox) {
@@ -186,10 +183,8 @@
      * @return the newly created mailbox field.
      */
     public static MailboxField mailbox(String fieldName, Mailbox mailbox) {
-        String value = encodeAddresses(Collections.singleton(mailbox));
-
-        String folded = MimeUtil.fold(value, fieldName.length() + 2);
-        return parse(MailboxField.class, fieldName, folded);
+        String fieldValue = encodeAddresses(Collections.singleton(mailbox));
+        return parse(MailboxField.class, fieldName, fieldValue);
     }
 
     /**
@@ -206,10 +201,8 @@
      */
     public static MailboxListField mailboxList(String fieldName,
             Iterable<Mailbox> mailboxes) {
-        String value = encodeAddresses(mailboxes);
-
-        String folded = MimeUtil.fold(value, fieldName.length() + 2);
-        return parse(MailboxListField.class, fieldName, folded);
+        String fieldValue = encodeAddresses(mailboxes);
+        return parse(MailboxListField.class, fieldName, fieldValue);
     }
 
     /**
@@ -230,21 +223,26 @@
      */
     public static AddressListField addressList(String fieldName,
             Iterable<Address> addresses) {
-        String value = encodeAddresses(addresses);
-
-        String folded = MimeUtil.fold(value, fieldName.length() + 2);
-        return parse(AddressListField.class, fieldName, folded);
+        String fieldValue = encodeAddresses(addresses);
+        return parse(AddressListField.class, fieldName, fieldValue);
     }
 
     private static <F extends Field> F parse(Class<F> fieldClass,
             String fieldName, String fieldBody) {
-        Field field = Field.parse(fieldName, fieldBody);
-        if (!fieldClass.isInstance(field)) {
+        try {
+            String raw = MimeUtil.fold(fieldName + ": " + fieldBody, 0);
+
+            Field field = Field.parse(raw);
+            if (!fieldClass.isInstance(field)) {
+                throw new IllegalArgumentException("Incompatible field name: "
+                        + fieldName);
+            }
+
+            return fieldClass.cast(field);
+        } catch (MimeException e) {
             throw new IllegalArgumentException("Illegal field name: "
                     + fieldName);
         }
-
-        return fieldClass.cast(field);
     }
 
     private static String encodeAddresses(Iterable<? extends Address> addresses) {

Modified: james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
URL: http://svn.apache.org/viewvc/james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java?rev=738064&r1=738063&r2=738064&view=diff
==============================================================================
--- james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java (original)
+++ james/mime4j/trunk/src/test/java/org/apache/james/mime4j/field/FieldsTest.java Tue Jan 27 12:01:21 2009
@@ -160,7 +160,7 @@
                 "Sm\370rebr\370d").getRaw());
 
         String seventyEight = "12345678901234567890123456789012345678901234567890123456789012345678";
-        assertEquals("Subject: " + seventyEight, Fields.subject(seventyEight)
+        assertEquals("Subject:\r\n " + seventyEight, Fields.subject(seventyEight)
                 .getRaw());
 
         String seventyNine = seventyEight + "9";