You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/12/25 13:00:21 UTC

svn commit: r1052772 - in /james/server/trunk/core/src/main/java/org/apache/james/core: MimeMessageInputStream.java MimeMessageWrapper.java

Author: norman
Date: Sat Dec 25 12:00:21 2010
New Revision: 1052772

URL: http://svn.apache.org/viewvc?rev=1052772&view=rev
Log:
Make sure the MimeMessageInputStream see all changes on the MimeMessage when providing the stream. This is a fix for lost Message Content updates, anyway I will work on optimize it a bit more. See JAMES-1154

Modified:
    james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java
    james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java

Modified: james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java?rev=1052772&r1=1052771&r2=1052772&view=diff
==============================================================================
--- james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java (original)
+++ james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageInputStream.java Sat Dec 25 12:00:21 2010
@@ -27,7 +27,6 @@ import java.io.InputStream;
 import javax.mail.MessagingException;
 import javax.mail.internet.MimeMessage;
 
-import org.apache.james.util.stream.CombinedInputStream;
 
 /**
  * Provide an {@link InputStream} over an {@link MimeMessage}
@@ -44,10 +43,11 @@ public class MimeMessageInputStream exte
      *                if possible
      * @throws MessagingException
      */
-    @SuppressWarnings("unchecked")
     public MimeMessageInputStream(MimeMessage message, boolean tryCast) throws MessagingException {
         MimeMessage m = message;
        
+        m.saveChanges();
+        
         // check if we need to use the wrapped message
         if (tryCast && m instanceof MimeMessageCopyOnWriteProxy) {
             m = ((MimeMessageCopyOnWriteProxy) m).getWrappedMessage();
@@ -57,20 +57,15 @@ public class MimeMessageInputStream exte
         if (tryCast && m instanceof MimeMessageWrapper) {
             in = ((MimeMessageWrapper) m).getMessageInputStream();
         } else {
+
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
             try {
-                in = new CombinedInputStream(new InputStream[] { new InternetHeadersInputStream(message.getAllHeaderLines()), message.getRawInputStream() });
-            } catch (MessagingException e) {
-                // its possible that MimeMessage.getRawInputStream throws an exception when try to access the method on a self constructed MimeMessage.
-                // so try to read it in memory 
-                ByteArrayOutputStream out = new ByteArrayOutputStream();
-                try {
-                    message.writeTo(out);
-                    in = new ByteArrayInputStream(out.toByteArray());
-                } catch (IOException e1) {
-                    throw new MessagingException("Unable to read message " + message, e);
-                }
-                
+                message.writeTo(out);
+                in = new ByteArrayInputStream(out.toByteArray());
+            } catch (IOException e1) {
+                throw new MessagingException("Unable to read message " + message, e1);
             }
+
         }
 
     }

Modified: james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java
URL: http://svn.apache.org/viewvc/james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java?rev=1052772&r1=1052771&r2=1052772&view=diff
==============================================================================
--- james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java (original)
+++ james/server/trunk/core/src/main/java/org/apache/james/core/MimeMessageWrapper.java Sat Dec 25 12:00:21 2010
@@ -21,6 +21,7 @@
 
 package org.apache.james.core;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
@@ -545,7 +546,7 @@ public class MimeMessageWrapper
     /**
      * @see javax.mail.internet.MimeMessage#getRawInputStream()
      */
-    public InputStream getRawInputStream() throws MessagingException {
+    public synchronized InputStream getRawInputStream() throws MessagingException {
         if (!messageParsed && !isModified() && source != null) {
             InputStream is;
             try {
@@ -556,16 +557,19 @@ public class MimeMessageWrapper
             } catch (IOException e) {
                 throw new MessagingException("Unable to read the stream: " + e.getMessage(), e);
             }
-        } else return super.getRawInputStream();
+        } else {
+            return super.getRawInputStream();
+        }
     }
 
     /**
      * Return an {@link InputStream} which holds the full content of the message. This method
-     * tries to optimize this call as far as possible
+     * tries to optimize this call as far as possible. This stream contains the updated {@link MimeMessage} content if something was changed
      * 
      * @return messageInputStream
      * @throws MessagingException
      */
+    
     public synchronized InputStream getMessageInputStream() throws MessagingException{
         if (!messageParsed && !isModified() && source != null) {
             try {
@@ -574,7 +578,16 @@ public class MimeMessageWrapper
                 throw new MessagingException("Unable to get inputstream", e);
             }
         } else {
-            return new MimeMessageInputStream(this, false);
+            
+            //TODO: Optimise me...
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            try {
+                writeTo(out);
+                return new ByteArrayInputStream(out.toByteArray());
+
+            } catch (IOException e) {
+                throw new MessagingException("Unable to get inputstream", e);
+            }
         }
     }
     



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org