Author: norman
Date: Wed Nov  3 14:52:42 2010
New Revision: 1030480

URL: http://svn.apache.org/viewvc?rev=1030480&view=rev
Log:
Fix parsing of MimeMessage instances which were not constructed via an 
InputStream (JAMES-1106)

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

Modified: 
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStream.java
URL: 
http://svn.apache.org/viewvc/james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStream.java?rev=1030480&r1=1030479&r2=1030480&view=diff
==============================================================================
--- 
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStream.java
 (original)
+++ 
james/server/trunk/core-library/src/main/java/org/apache/james/core/MimeMessageInputStream.java
 Wed Nov  3 14:52:42 2010
@@ -19,6 +19,8 @@
 
 package org.apache.james.core;
 
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 
@@ -40,14 +42,27 @@ public class MimeMessageInputStream exte
        
         // check if we need to use the wrapped message
         if (m instanceof MimeMessageCopyOnWriteProxy) {
-            m = ((MimeMessageCopyOnWriteProxy) message).getWrappedMessage();
+            m = ((MimeMessageCopyOnWriteProxy) m).getWrappedMessage();
         }
 
         // check if we can use optimized operations
         if (m instanceof MimeMessageWrapper) {
             in = ((MimeMessageWrapper) m).getMessageInputStream();
         } else {
-            in = new CombinedInputStream(new InputStream[] { new 
InternetHeadersInputStream(message.getAllHeaderLines()), 
message.getRawInputStream() });
+            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);
+                }
+                
+            }
         }
 
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to