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 ba...@apache.org on 2009/12/30 15:13:06 UTC

svn commit: r894617 - in /james/mime4j/branches/cycleclean: benchmark/src/main/java/org/apache/james/mime4j/ core/src/main/java/org/apache/james/mime4j/message/

Author: bago
Date: Wed Dec 30 14:13:06 2009
New Revision: 894617

URL: http://svn.apache.org/viewvc?rev=894617&view=rev
Log:
Removed decoding capabilities from our ContentHandlers, preferring relying on MimeStreamParser.setContentDecoding(true) (MIME4J-154)

Modified:
    james/mime4j/branches/cycleclean/benchmark/src/main/java/org/apache/james/mime4j/LongMultipartReadBench.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Message.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
    james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java

Modified: james/mime4j/branches/cycleclean/benchmark/src/main/java/org/apache/james/mime4j/LongMultipartReadBench.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/benchmark/src/main/java/org/apache/james/mime4j/LongMultipartReadBench.java?rev=894617&r1=894616&r2=894617&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/benchmark/src/main/java/org/apache/james/mime4j/LongMultipartReadBench.java (original)
+++ james/mime4j/branches/cycleclean/benchmark/src/main/java/org/apache/james/mime4j/LongMultipartReadBench.java Wed Dec 30 14:13:06 2009
@@ -146,8 +146,10 @@
         public void run(byte[] content, int repetitions) throws Exception {
             ContentHandler contentHandler = new SimpleContentHandler() {
                 @Override
-                public void bodyDecoded(BodyDescriptor bd, InputStream is)
+                public void body(BodyDescriptor bd, InputStream is)
                         throws IOException {
+                	byte[] b = new byte[4096];
+					while (is.read(b) != -1);
                 }
 
                 @Override
@@ -157,6 +159,7 @@
 
             for (int i = 0; i < repetitions; i++) {
                 MimeStreamParser parser = new MimeStreamParser();
+                parser.setContentDecoding(true);
                 parser.setContentHandler(contentHandler);
                 parser.parse(new ByteArrayInputStream(content));
             }

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Message.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Message.java?rev=894617&r1=894616&r2=894617&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Message.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/Message.java Wed Dec 30 14:13:06 2009
@@ -137,6 +137,7 @@
             MimeIOException {
         try {
             MimeStreamParser parser = new MimeStreamParser(config);
+            parser.setContentDecoding(true);
             parser.setContentHandler(new MessageBuilder(this, storageProvider));
             parser.parse(is);
         } catch (MimeException e) {

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java?rev=894617&r1=894616&r2=894617&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/MessageBuilder.java Wed Dec 30 14:13:06 2009
@@ -24,8 +24,6 @@
 import java.util.Stack;
 
 import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.codec.Base64InputStream;
-import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
 import org.apache.james.mime4j.descriptor.BodyDescriptor;
 import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.field.Field;
@@ -35,7 +33,6 @@
 import org.apache.james.mime4j.storage.StorageProvider;
 import org.apache.james.mime4j.util.ByteArrayBuffer;
 import org.apache.james.mime4j.util.ByteSequence;
-import org.apache.james.mime4j.util.MimeUtil;
 
 /**
  * A <code>ContentHandler</code> for building an <code>Entity</code> to be
@@ -132,10 +129,15 @@
     public void body(BodyDescriptor bd, final InputStream is) throws MimeException, IOException {
         expect(Entity.class);
         
-        final String enc = bd.getTransferEncoding();
+        // NO NEED TO MANUALLY RUN DECODING. 
+        // The parser has a "setContentDecoding" method. We should
+        // simply instantiate the MimeStreamParser with that method.
+        
+        // final String enc = bd.getTransferEncoding();
         
         final Body body;
         
+        /*
         final InputStream decodedStream;
         if (MimeUtil.ENC_BASE64.equals(enc)) {
             decodedStream = new Base64InputStream(is);
@@ -144,11 +146,12 @@
         } else {
             decodedStream = is;
         }
+        */
         
         if (bd.getMimeType().startsWith("text/")) {
-            body = bodyFactory.textBody(decodedStream, bd.getCharset());
+            body = bodyFactory.textBody(is, bd.getCharset());
         } else {
-            body = bodyFactory.binaryBody(decodedStream);
+            body = bodyFactory.binaryBody(is);
         }
         
         Entity entity = ((Entity) stack.peek());

Modified: james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java
URL: http://svn.apache.org/viewvc/james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java?rev=894617&r1=894616&r2=894617&view=diff
==============================================================================
--- james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java (original)
+++ james/mime4j/branches/cycleclean/core/src/main/java/org/apache/james/mime4j/message/SimpleContentHandler.java Wed Dec 30 14:13:06 2009
@@ -20,24 +20,17 @@
 package org.apache.james.mime4j.message;
 
 import org.apache.james.mime4j.MimeException;
-import org.apache.james.mime4j.codec.Base64InputStream;
-import org.apache.james.mime4j.codec.QuotedPrintableInputStream;
-import org.apache.james.mime4j.descriptor.BodyDescriptor;
 import org.apache.james.mime4j.field.DefaultFieldParser;
 import org.apache.james.mime4j.field.Field;
 import org.apache.james.mime4j.parser.AbstractContentHandler;
 import org.apache.james.mime4j.parser.RawField;
-import org.apache.james.mime4j.util.MimeUtil;
-
-import java.io.InputStream;
-import java.io.IOException;
 
 /**
  * Abstract implementation of ContentHandler that automates common
- * tasks. Currently performs header parsing and applies content-transfer
- * decoding to body parts.
+ * tasks. Currently performs header parsing.
  *
- * 
+ * Older versions of this class performed decoding of content streams.
+ * This can be now easily achieved by calling setContentDecoding(true) on the MimeStreamParser.
  */
 public abstract class SimpleContentHandler extends  AbstractContentHandler {
 
@@ -46,21 +39,6 @@
      */
     public abstract void headers(Header header);
 
-    /**
-     * Called when the body of a discrete (non-multipart) entity is encountered.
-
-     * @param bd encapsulates the values (either read from the
-     *        message stream or, if not present, determined implictly
-     *        as described in the
-     *        MIME rfc:s) of the <code>Content-Type</code> and
-     *        <code>Content-Transfer-Encoding</code> header fields.
-     * @param is the contents of the body. Base64 or quoted-printable
-     *        decoding will be applied transparently.
-     * @throws IOException should be thrown on I/O errors.
-     */
-    public abstract void bodyDecoded(BodyDescriptor bd, InputStream is) throws IOException;
-
-
     /* Implement introduced callbacks. */
 
     private Header currHeader;
@@ -92,19 +70,4 @@
         headers(tmp);
     }
 
-    /**
-     * @see org.apache.james.mime4j.parser.AbstractContentHandler#body(org.apache.james.mime4j.descriptor.BodyDescriptor, java.io.InputStream)
-     */
-    @Override
-    public final void body(BodyDescriptor bd, InputStream is) throws IOException {
-        if (MimeUtil.isBase64Encoding(bd.getTransferEncoding())) {
-            bodyDecoded(bd, new Base64InputStream(is));
-        }
-        else if (MimeUtil.isQuotedPrintableEncoded(bd.getTransferEncoding())) {
-            bodyDecoded(bd, new QuotedPrintableInputStream(is));
-        }
-        else {
-            bodyDecoded(bd, is);
-        }
-    }
 }