Rename AddressBuilder to DefaultAddressBuilder and introduce a common interface for DefaultAddressBuilder/LenientAddressBuilder

git-svn-id: https://svn.apache.org/repos/asf/james/mime4j/trunk@1635935 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java b/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
index 4f1c36c..6a5fec5 100644
--- a/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
+++ b/core/src/main/java/org/apache/james/mime4j/io/InputStreams.java
@@ -63,16 +63,16 @@
         return new BinaryInputStream(b);
     }
 
-    public static InputStream createAscii(final String s) {
+    public static InputStream createAscii(final CharSequence s) {
         if (s == null) {
-            throw new IllegalArgumentException("String may not be null");
+            throw new IllegalArgumentException("CharSequence may not be null");
         }
         return new TextInputStream(s, Charsets.US_ASCII, 1024);
     }
 
-    public static InputStream create(final String s, final Charset charset) {
+    public static InputStream create(final CharSequence s, final Charset charset) {
         if (s == null) {
-            throw new IllegalArgumentException("String may not be null");
+            throw new IllegalArgumentException("CharSequence may not be null");
         }
         return new TextInputStream(s, charset != null ? charset : Charsets.DEFAULT_CHARSET, 1024);
     }
diff --git a/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java b/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java
index beaf922..9d7ee45 100644
--- a/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java
+++ b/core/src/main/java/org/apache/james/mime4j/util/ContentUtil.java
@@ -97,7 +97,7 @@
      *            string to encode.
      * @return encoded string as an immutable sequence of bytes.
      */
-    public static ByteSequence encode(String string) {
+    public static ByteSequence encode(CharSequence string) {
         if (string == null) {
             return null;
         }
@@ -118,7 +118,7 @@
      *            string to encode.
      * @return encoded string as an immutable sequence of bytes.
      */
-    public static ByteSequence encode(Charset charset, String string) {
+    public static ByteSequence encode(Charset charset, CharSequence string) {
         if (string == null) {
             return null;
         }
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java
index ec41b91..8b1be02 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldImpl.java
@@ -23,7 +23,7 @@
 import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.field.AddressListField;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
 
@@ -66,7 +66,7 @@
         String body = getBody();
 
         try {
-            addressList = AddressBuilder.DEFAULT.parseAddressList(body, monitor);
+            addressList = DefaultAddressParser.DEFAULT.parseAddressList(body, monitor);
         } catch (ParseException e) {
             parseException = e;
         }
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java
index 6be4474..2fbf386 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/AddressListFieldLenientImpl.java
@@ -26,7 +26,7 @@
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.AddressListField;
-import org.apache.james.mime4j.field.address.LenientAddressBuilder;
+import org.apache.james.mime4j.field.address.LenientAddressParser;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
@@ -68,7 +68,7 @@
             pos = 0;
         }
         ParserCursor cursor = new ParserCursor(pos, buf.length());
-        addressList = LenientAddressBuilder.DEFAULT.parseAddressList(buf, cursor);
+        addressList = LenientAddressParser.DEFAULT.parseAddressList(buf, cursor);
     }
 
     public static final FieldParser<AddressListField> PARSER = new FieldParser<AddressListField>() {
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java
index 4768a4b..48aa039 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldImpl.java
@@ -23,7 +23,7 @@
 import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.MailboxField;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
 
@@ -65,7 +65,7 @@
         String body = getBody();
 
         try {
-            mailbox = AddressBuilder.DEFAULT.parseMailbox(body, monitor);
+            mailbox = DefaultAddressParser.DEFAULT.parseMailbox(body, monitor);
         } catch (ParseException e) {
             parseException = e;
         }
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java
index f2a862d..ca40d15 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/MailboxFieldLenientImpl.java
@@ -23,7 +23,7 @@
 import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.field.MailboxField;
-import org.apache.james.mime4j.field.address.LenientAddressBuilder;
+import org.apache.james.mime4j.field.address.LenientAddressParser;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
@@ -64,7 +64,7 @@
             pos = 0;
         }
         ParserCursor cursor = new ParserCursor(pos, buf.length());
-        mailbox = LenientAddressBuilder.DEFAULT.parseMailbox(buf, cursor, null);
+        mailbox = LenientAddressParser.DEFAULT.parseMailbox(buf, cursor, null);
     }
 
     public static final FieldParser<MailboxField> PARSER = new FieldParser<MailboxField>() {
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java
index 7087dca..2111bc5 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldImpl.java
@@ -23,7 +23,7 @@
 import org.apache.james.mime4j.dom.FieldParser;
 import org.apache.james.mime4j.dom.address.MailboxList;
 import org.apache.james.mime4j.dom.field.MailboxListField;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.field.address.ParseException;
 import org.apache.james.mime4j.stream.Field;
 
@@ -65,7 +65,7 @@
         String body = getBody();
 
         try {
-            mailboxList = AddressBuilder.DEFAULT.parseAddressList(body, monitor).flatten();
+            mailboxList = DefaultAddressParser.DEFAULT.parseAddressList(body, monitor).flatten();
         } catch (ParseException e) {
             parseException = e;
         }
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java b/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java
index 5e104a6..0b67a3e 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/MailboxListFieldLenientImpl.java
@@ -26,7 +26,7 @@
 import org.apache.james.mime4j.dom.address.Mailbox;
 import org.apache.james.mime4j.dom.address.MailboxList;
 import org.apache.james.mime4j.dom.field.MailboxListField;
-import org.apache.james.mime4j.field.address.LenientAddressBuilder;
+import org.apache.james.mime4j.field.address.LenientAddressParser;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.stream.ParserCursor;
 import org.apache.james.mime4j.stream.RawField;
@@ -68,7 +68,7 @@
             pos = 0;
         }
         ParserCursor cursor = new ParserCursor(pos, buf.length());
-        mailboxList = LenientAddressBuilder.DEFAULT.parseAddressList(buf, cursor).flatten();
+        mailboxList = LenientAddressParser.DEFAULT.parseAddressList(buf, cursor).flatten();
     }
 
     public static final FieldParser<MailboxListField> PARSER = new FieldParser<MailboxListField>() {
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/address/AddressParser.java b/dom/src/main/java/org/apache/james/mime4j/field/address/AddressParser.java
new file mode 100644
index 0000000..ebf07af
--- /dev/null
+++ b/dom/src/main/java/org/apache/james/mime4j/field/address/AddressParser.java
@@ -0,0 +1,76 @@
+/****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one   *
+ * or more contributor license agreements.  See the NOTICE file *
+ * distributed with this work for additional information        *
+ * regarding copyright ownership.  The ASF licenses this file   *
+ * to you under the Apache License, Version 2.0 (the            *
+ * "License"); you may not use this file except in compliance   *
+ * with the License.  You may obtain a copy of the License at   *
+ *                                                              *
+ *   http://www.apache.org/licenses/LICENSE-2.0                 *
+ *                                                              *
+ * Unless required by applicable law or agreed to in writing,   *
+ * software distributed under the License is distributed on an  *
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
+ * KIND, either express or implied.  See the License for the    *
+ * specific language governing permissions and limitations      *
+ * under the License.                                           *
+ ****************************************************************/
+
+package org.apache.james.mime4j.field.address;
+
+import org.apache.james.mime4j.dom.address.Address;
+import org.apache.james.mime4j.dom.address.AddressList;
+import org.apache.james.mime4j.dom.address.Group;
+import org.apache.james.mime4j.dom.address.Mailbox;
+
+/**
+ * Abstract address parser.
+ * 
+ */
+public interface AddressParser {
+
+    /**
+     * Parses the specified raw string into an address.
+     *
+     * @param text
+     *            string to parse.
+     * @return an <code>Address</code> object for the specified string.
+     * @throws ParseException if the raw string does not represent a single address.
+     */
+    Address parseAddress(CharSequence text) throws ParseException;
+
+    /**
+     * Parse the address list string, such as the value of a From, To, Cc, Bcc,
+     * Sender, or Reply-To header.
+     *
+     * The string MUST be unfolded already.
+     * @param text
+     *            string to parse.
+     */
+    AddressList parseAddressList(CharSequence text) throws ParseException;
+
+    /**
+     * Parses the specified raw string into a mailbox address.
+     *
+     * @param text
+     *            string to parse.
+     * @return a <code>Mailbox</code> object for the specified string.
+     * @throws ParseException
+     *             if the raw string does not represent a single mailbox
+     *             address.
+     */
+    Mailbox parseMailbox(CharSequence text) throws ParseException;
+
+    /**
+     * Parses the specified raw string into a group address.
+     *
+     * @param text
+     *            string to parse.
+     * @return a <code>Group</code> object for the specified string.
+     * @throws ParseException
+     *             if the raw string does not represent a single group address.
+     */
+    Group parseGroup(CharSequence text) throws ParseException;
+
+}
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/address/AddressBuilder.java b/dom/src/main/java/org/apache/james/mime4j/field/address/DefaultAddressParser.java
similarity index 68%
rename from dom/src/main/java/org/apache/james/mime4j/field/address/AddressBuilder.java
rename to dom/src/main/java/org/apache/james/mime4j/field/address/DefaultAddressParser.java
index 87c1d0e..9aab105 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/address/AddressBuilder.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/address/DefaultAddressParser.java
@@ -19,42 +19,41 @@
 
 package org.apache.james.mime4j.field.address;
 
-import java.io.StringReader;
-
+import org.apache.james.mime4j.Charsets;
 import org.apache.james.mime4j.codec.DecodeMonitor;
 import org.apache.james.mime4j.dom.address.Address;
 import org.apache.james.mime4j.dom.address.AddressList;
 import org.apache.james.mime4j.dom.address.Group;
 import org.apache.james.mime4j.dom.address.Mailbox;
+import org.apache.james.mime4j.io.InputStreams;
 
 /**
  * Default (strict) builder for {@link Address} and its subclasses.
  */
-public class AddressBuilder {
+public class DefaultAddressParser implements AddressParser {
 
-    public static final AddressBuilder DEFAULT = new AddressBuilder();
+    public static final DefaultAddressParser DEFAULT = new DefaultAddressParser();
 
-    protected AddressBuilder() {
+    protected DefaultAddressParser() {
         super();
     }
 
     /**
      * Parses the specified raw string into an address.
      *
-     * @param rawAddressString
+     * @param text
      *            string to parse.
      * @param monitor the DecodeMonitor to be used while parsing/decoding
      * @return an <code>Address</code> object for the specified string.
      * @throws ParseException if the raw string does not represent a single address.
      */
-    public Address parseAddress(String rawAddressString, DecodeMonitor monitor) throws ParseException {
-        AddressListParser parser = new AddressListParser(new StringReader(
-                rawAddressString));
+    public Address parseAddress(CharSequence text, DecodeMonitor monitor) throws ParseException {
+        AddressListParser parser = new AddressListParser(InputStreams.create(text, Charsets.UTF_8));
         return Builder.getInstance().buildAddress(parser.parseAddress(), monitor);
     }
 
-    public Address parseAddress(String rawAddressString) throws ParseException {
-        return parseAddress(rawAddressString, DecodeMonitor.STRICT);
+    public Address parseAddress(CharSequence text) throws ParseException {
+        return parseAddress(text, DecodeMonitor.STRICT);
     }
 
     /**
@@ -64,21 +63,20 @@
      * The string MUST be unfolded already.
      * @param monitor the DecodeMonitor to be used while parsing/decoding
      */
-    public AddressList parseAddressList(String rawAddressList, DecodeMonitor monitor)
+    public AddressList parseAddressList(CharSequence text, DecodeMonitor monitor)
             throws ParseException {
-        AddressListParser parser = new AddressListParser(new StringReader(
-                rawAddressList));
+        AddressListParser parser = new AddressListParser(InputStreams.create(text, Charsets.UTF_8));
         return Builder.getInstance().buildAddressList(parser.parseAddressList(), monitor);
     }
 
-    public AddressList parseAddressList(String rawAddressList) throws ParseException {
-        return parseAddressList(rawAddressList, DecodeMonitor.STRICT);
+    public AddressList parseAddressList(CharSequence text) throws ParseException {
+        return parseAddressList(text, DecodeMonitor.STRICT);
     }
 
     /**
      * Parses the specified raw string into a mailbox address.
      *
-     * @param rawMailboxString
+     * @param text
      *            string to parse.
      * @param monitor the DecodeMonitor to be used while parsing/decoding.
      * @return a <code>Mailbox</code> object for the specified string.
@@ -86,35 +84,34 @@
      *             if the raw string does not represent a single mailbox
      *             address.
      */
-    public Mailbox parseMailbox(String rawMailboxString, DecodeMonitor monitor) throws ParseException {
-        AddressListParser parser = new AddressListParser(new StringReader(
-                rawMailboxString));
+    public Mailbox parseMailbox(CharSequence text, DecodeMonitor monitor) throws ParseException {
+        AddressListParser parser = new AddressListParser(InputStreams.create(text, Charsets.UTF_8));
         return Builder.getInstance().buildMailbox(parser.parseMailbox(), monitor);
     }
 
-    public Mailbox parseMailbox(String rawMailboxString) throws ParseException {
-        return parseMailbox(rawMailboxString, DecodeMonitor.STRICT);
+    public Mailbox parseMailbox(CharSequence text) throws ParseException {
+        return parseMailbox(text, DecodeMonitor.STRICT);
     }
 
     /**
      * Parses the specified raw string into a group address.
      *
-     * @param rawGroupString
+     * @param text
      *            string to parse.
      * @return a <code>Group</code> object for the specified string.
      * @throws ParseException
      *             if the raw string does not represent a single group address.
      */
-    public Group parseGroup(String rawGroupString, DecodeMonitor monitor) throws ParseException {
-        Address address = parseAddress(rawGroupString, monitor);
+    public Group parseGroup(CharSequence text, DecodeMonitor monitor) throws ParseException {
+        Address address = parseAddress(text, monitor);
         if (!(address instanceof Group))
             throw new ParseException("Not a group address");
 
         return (Group) address;
     }
 
-    public Group parseGroup(String rawGroupString) throws ParseException {
-        return parseGroup(rawGroupString, DecodeMonitor.STRICT);
+    public Group parseGroup(CharSequence text) throws ParseException {
+        return parseGroup(text, DecodeMonitor.STRICT);
     }
 
 }
diff --git a/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java b/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressParser.java
similarity index 96%
rename from dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java
rename to dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressParser.java
index 82f69ec..c059826 100644
--- a/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressBuilder.java
+++ b/dom/src/main/java/org/apache/james/mime4j/field/address/LenientAddressParser.java
@@ -41,7 +41,7 @@
  * Lenient (tolerant to non-critical format violations) builder for {@link Address}
  * and its subclasses.
  */
-public class LenientAddressBuilder {
+public class LenientAddressParser implements AddressParser {
 
     private static final int AT                = '@';
     private static final int OPENING_BRACKET   = '<';
@@ -56,12 +56,12 @@
     private static final BitSet COLON_ONLY             = RawFieldParser.INIT_BITSET(COLON);
     private static final BitSet SEMICOLON_ONLY         = RawFieldParser.INIT_BITSET(SEMICOLON);
 
-    public static final LenientAddressBuilder DEFAULT = new LenientAddressBuilder(DecodeMonitor.SILENT);
+    public static final LenientAddressParser DEFAULT = new LenientAddressParser(DecodeMonitor.SILENT);
 
     private final DecodeMonitor monitor;
     private final RawFieldParser parser;
 
-    protected LenientAddressBuilder(final DecodeMonitor monitor) {
+    protected LenientAddressParser(final DecodeMonitor monitor) {
         super();
         this.monitor = monitor;
         this.parser = new RawFieldParser();
@@ -215,7 +215,7 @@
         }
     }
 
-    public Mailbox parseMailbox(final String text) {
+    public Mailbox parseMailbox(final CharSequence text) {
         ByteSequence raw = ContentUtil.encode(text);
         ParserCursor cursor = new ParserCursor(0, text.length());
         return parseMailbox(raw, cursor, null);
@@ -259,7 +259,7 @@
         return new Group(name, mboxes);
     }
 
-    public Group parseGroup(final String text) {
+    public Group parseGroup(final CharSequence text) {
         ByteSequence raw = ContentUtil.encode(text);
         ParserCursor cursor = new ParserCursor(0, text.length());
         return parseGroup(raw, cursor);
@@ -302,7 +302,7 @@
         }
     }
 
-    public Address parseAddress(final String text) {
+    public Address parseAddress(final CharSequence text) {
         ByteSequence raw = ContentUtil.encode(text);
         ParserCursor cursor = new ParserCursor(0, text.length());
         return parseAddress(raw, cursor, null);
@@ -325,7 +325,7 @@
         return new AddressList(addresses, false);
     }
 
-    public AddressList parseAddressList(final String text) {
+    public AddressList parseAddressList(final CharSequence text) {
         ByteSequence raw = ContentUtil.encode(text);
         ParserCursor cursor = new ParserCursor(0, text.length());
         return parseAddressList(raw, cursor);
diff --git a/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java b/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
index 5504cda..a9bc6a7 100644
--- a/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
+++ b/dom/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
@@ -55,7 +55,7 @@
 import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.field.Fields;
 import org.apache.james.mime4j.field.LenientFieldParser;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.io.InputStreams;
 import org.apache.james.mime4j.parser.MimeStreamParser;
 import org.apache.james.mime4j.stream.BodyDescriptorBuilder;
@@ -777,7 +777,7 @@
         if (mailbox == null) {
             removeFields(fieldName);
         } else {
-            setField(Fields.mailbox(fieldName, AddressBuilder.DEFAULT.parseMailbox(mailbox)));
+            setField(Fields.mailbox(fieldName, DefaultAddressParser.DEFAULT.parseMailbox(mailbox)));
         }
         return this;
     }
@@ -792,7 +792,7 @@
     }
 
     private MessageBuilder setMailboxList(String fieldName, String mailbox) throws ParseException {
-        return setMailboxList(fieldName, mailbox == null ? null : AddressBuilder.DEFAULT.parseMailbox(mailbox));
+        return setMailboxList(fieldName, mailbox == null ? null : DefaultAddressParser.DEFAULT.parseMailbox(mailbox));
     }
 
     private MessageBuilder setMailboxList(String fieldName, Mailbox... mailboxes) {
@@ -805,7 +805,7 @@
         } else {
             List<Mailbox> list = new ArrayList<Mailbox>();
             for (String mailbox: mailboxes) {
-                list.add(AddressBuilder.DEFAULT.parseMailbox(mailbox));
+                list.add(DefaultAddressParser.DEFAULT.parseMailbox(mailbox));
             }
             return list;
         }
@@ -834,7 +834,7 @@
     }
 
     private MessageBuilder setAddressList(String fieldName, String address) throws ParseException {
-        return setAddressList(fieldName, address == null ? null : AddressBuilder.DEFAULT.parseMailbox(address));
+        return setAddressList(fieldName, address == null ? null : DefaultAddressParser.DEFAULT.parseMailbox(address));
     }
 
     private MessageBuilder setAddressList(String fieldName, Address... addresses) {
@@ -847,7 +847,7 @@
         } else {
             List<Address> list = new ArrayList<Address>();
             for (String address: addresses) {
-                list.add(AddressBuilder.DEFAULT.parseAddress(address));
+                list.add(DefaultAddressParser.DEFAULT.parseAddress(address));
             }
             return list;
         }
diff --git a/dom/src/test/java/org/apache/james/mime4j/field/FieldsTest.java b/dom/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
index 42169fa..07254f3 100644
--- a/dom/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/field/FieldsTest.java
@@ -35,7 +35,7 @@
 import org.apache.james.mime4j.dom.field.DateTimeField;
 import org.apache.james.mime4j.dom.field.MailboxField;
 import org.apache.james.mime4j.dom.field.MailboxListField;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.apache.james.mime4j.stream.Field;
 import org.apache.james.mime4j.util.ByteSequence;
 import org.apache.james.mime4j.util.ContentUtil;
@@ -258,15 +258,15 @@
 
     @Test
     public void testSender() throws Exception {
-        MailboxField field = Fields.sender(AddressBuilder.DEFAULT
+        MailboxField field = Fields.sender(DefaultAddressParser.DEFAULT
                 .parseMailbox("JD <john.doe@acme.org>"));
         Assert.assertEquals("Sender: JD <john.doe@acme.org>", decode(field));
     }
 
     @Test
     public void testFrom() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         MailboxListField field = Fields.from(mailbox1);
         Assert.assertEquals("From: JD <john.doe@acme.org>", decode(field));
@@ -282,9 +282,9 @@
 
     @Test
     public void testTo() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.org");
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.org");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
         Group group = new Group("The Does", mailbox1, mailbox2);
 
         AddressListField field = Fields.to(group);
@@ -304,9 +304,9 @@
 
     @Test
     public void testCc() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.org");
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.org");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
         Group group = new Group("The Does", mailbox1, mailbox2);
 
         AddressListField field = Fields.cc(group);
@@ -326,9 +326,9 @@
 
     @Test
     public void testBcc() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.org");
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.org");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
         Group group = new Group("The Does", mailbox1, mailbox2);
 
         AddressListField field = Fields.bcc(group);
@@ -348,9 +348,9 @@
 
     @Test
     public void testReplyTo() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.org");
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.org");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
         Group group = new Group("The Does", mailbox1, mailbox2);
 
         AddressListField field = Fields.replyTo(group);
@@ -370,15 +370,15 @@
 
     @Test
     public void testMailbox() throws Exception {
-        MailboxField field = Fields.mailbox("Resent-Sender", AddressBuilder.DEFAULT
+        MailboxField field = Fields.mailbox("Resent-Sender", DefaultAddressParser.DEFAULT
                 .parseMailbox("JD <john.doe@acme.org>"));
         Assert.assertEquals("Resent-Sender: JD <john.doe@acme.org>", decode(field));
     }
 
     @Test
     public void testMailboxList() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         MailboxListField field = Fields.mailboxList("Resent-From", Arrays
                 .asList(mailbox1, mailbox2));
@@ -388,9 +388,9 @@
 
     @Test
     public void testAddressList() throws Exception {
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.org");
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("JD <john.doe@acme.org>");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.org");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
         Group group = new Group("The Does", mailbox1, mailbox2);
 
         AddressListField field = Fields.addressList("Resent-To", Arrays.asList(
diff --git a/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java b/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java
index 1bb17a5..0302d9f 100644
--- a/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/field/address/DefaultAddressBuilderTest.java
@@ -34,11 +34,11 @@
 
 public class DefaultAddressBuilderTest {
 
-    private AddressBuilder parser;
+    private DefaultAddressParser parser;
 
     @Before
     public void setUp() throws Exception {
-        parser = AddressBuilder.DEFAULT;
+        parser = DefaultAddressParser.DEFAULT;
     }
 
     @Test
diff --git a/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java b/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java
index 0dcafbf..36aee6c 100644
--- a/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/field/address/LenientAddressBuilderTest.java
@@ -37,11 +37,11 @@
 
 public class LenientAddressBuilderTest {
 
-    private LenientAddressBuilder parser;
+    private LenientAddressParser parser;
 
     @Before
     public void setUp() throws Exception {
-        parser = LenientAddressBuilder.DEFAULT;
+        parser = LenientAddressParser.DEFAULT;
     }
 
     @Test
diff --git a/dom/src/test/java/org/apache/james/mime4j/message/MessageBuilderTest.java b/dom/src/test/java/org/apache/james/mime4j/message/MessageBuilderTest.java
index 7e9a296..4fd49a8 100644
--- a/dom/src/test/java/org/apache/james/mime4j/message/MessageBuilderTest.java
+++ b/dom/src/test/java/org/apache/james/mime4j/message/MessageBuilderTest.java
@@ -37,7 +37,7 @@
 import org.apache.james.mime4j.dom.field.FieldName;
 import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.field.Fields;
-import org.apache.james.mime4j.field.address.AddressBuilder;
+import org.apache.james.mime4j.field.address.DefaultAddressParser;
 import org.junit.Assert;
 import org.junit.Test;
 import org.mockito.Mockito;
@@ -192,8 +192,8 @@
     public void testSetFrom() throws Exception {
         MessageBuilder builder = MessageBuilder.create();
 
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("john.doe@example.net");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.net");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("john.doe@example.net");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.net");
 
         builder.setFrom(mailbox1);
         Assert.assertEquals("john.doe@example.net", builder.getField("From")
@@ -226,10 +226,10 @@
     public void testSetTo() throws Exception {
         MessageBuilder builder = MessageBuilder.create();
 
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("john.doe@example.net");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.net");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("john.doe@example.net");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.net");
         Group group = new Group("Does", mailbox1, mailbox2);
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         builder.setTo(group);
         Assert.assertEquals("Does: john.doe@example.net, jane.doe@example.net;",
@@ -264,10 +264,10 @@
     public void testSetCc() throws Exception {
         MessageBuilder builder = MessageBuilder.create();
 
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("john.doe@example.net");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.net");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("john.doe@example.net");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.net");
         Group group = new Group("Does", mailbox1, mailbox2);
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         builder.setCc(group);
         Assert.assertEquals("Does: john.doe@example.net, jane.doe@example.net;",
@@ -302,10 +302,10 @@
     public void testSetBcc() throws Exception {
         MessageBuilder builder = MessageBuilder.create();
 
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("john.doe@example.net");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.net");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("john.doe@example.net");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.net");
         Group group = new Group("Does", mailbox1, mailbox2);
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         builder.setBcc(group);
         Assert.assertEquals("Does: john.doe@example.net, jane.doe@example.net;",
@@ -340,10 +340,10 @@
     public void testSetReplyTo() throws Exception {
         MessageBuilder builder = MessageBuilder.create();
 
-        Mailbox mailbox1 = AddressBuilder.DEFAULT.parseMailbox("john.doe@example.net");
-        Mailbox mailbox2 = AddressBuilder.DEFAULT.parseMailbox("jane.doe@example.net");
+        Mailbox mailbox1 = DefaultAddressParser.DEFAULT.parseMailbox("john.doe@example.net");
+        Mailbox mailbox2 = DefaultAddressParser.DEFAULT.parseMailbox("jane.doe@example.net");
         Group group = new Group("Does", mailbox1, mailbox2);
-        Mailbox mailbox3 = AddressBuilder.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
+        Mailbox mailbox3 = DefaultAddressParser.DEFAULT.parseMailbox("Mary Smith <mary@example.net>");
 
         builder.setReplyTo(group);
         Assert.assertEquals("Does: john.doe@example.net, jane.doe@example.net;",