Author: bago
Date: Fri Apr  7 12:50:54 2006
New Revision: 392373

URL: http://svn.apache.org/viewcvs?rev=392373&view=rev
Log:
Test and temporary fix for a rare but critical NPE in MimeMessageWrapper 
(JAMES-474)

Modified:
    
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
    james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java
    
james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java
    james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java

Modified: 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java?rev=392373&r1=392372&r2=392373&view=diff
==============================================================================
--- 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
 (original)
+++ 
james/server/trunk/src/java/org/apache/james/core/MimeMessageCopyOnWriteProxy.java
 Fri Apr  7 12:50:54 2006
@@ -147,19 +147,8 @@
         synchronized (refCount) {
             if (refCount.getReferenceCount() > 1) {
                 refCount.decrementReferenceCount();
-
                 refCount = new ReferenceCounter(1);
-                if (wrapped instanceof MimeMessageWrapper) {
-                    MimeMessageWrapper mmw = (MimeMessageWrapper) wrapped;
-                    if (!mmw.isModified()) {
-                        wrapped = new MimeMessageWrapper(mmw.source);
-                    } else {
-                        wrapped = new MimeMessage(wrapped);
-                    }
-                } else {
-                    // Not sure this will really clone the MimeMessage!
-                    wrapped = new MimeMessage(wrapped);
-                }
+                wrapped = new MimeMessageWrapper(wrapped);
             }
         }
     }

Modified: 
james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java?rev=392373&r1=392372&r2=392373&view=diff
==============================================================================
--- james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java 
(original)
+++ james/server/trunk/src/java/org/apache/james/core/MimeMessageWrapper.java 
Fri Apr  7 12:50:54 2006
@@ -106,6 +106,7 @@
         
         // if the original is an unmodified MimeMessageWrapped we clone the 
headers and
         // take its source.
+        /* Temporary commented out because of JAMES-474
         if (original instanceof MimeMessageWrapper && !((MimeMessageWrapper) 
original).bodyModified) {
             source = ((MimeMessageWrapper) original).source;
             // this probably speed up things
@@ -116,6 +117,7 @@
                 headersModified = ((MimeMessageWrapper) 
original).headersModified;
             }
         }
+        */
         
         if (source == null) {
             ByteArrayOutputStream bos;

Modified: 
james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java?rev=392373&r1=392372&r2=392373&view=diff
==============================================================================
--- 
james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java
 (original)
+++ 
james/server/trunk/src/test/org/apache/james/core/MimeMessageFromSharedStreamTest.java
 Fri Apr  7 12:50:54 2006
@@ -16,16 +16,17 @@
  ***********************************************************************/
 package org.apache.james.core;
 
+import com.sun.mail.util.SharedByteArrayInputStream;
+
 import javax.mail.Session;
 import javax.mail.internet.MimeMessage;
 
-import java.io.ByteArrayInputStream;
 import java.util.Properties;
 
 public class MimeMessageFromSharedStreamTest extends MimeMessageFromStreamTest 
{
     
     protected MimeMessage getMessageFromSources(String sources) throws 
Exception {
-        return new MimeMessage(Session.getDefaultInstance(new 
Properties()),new ByteArrayInputStream(sources.getBytes()));
+        return new MimeMessage(Session.getDefaultInstance(new 
Properties()),new SharedByteArrayInputStream(sources.getBytes()));
     }
 
 }

Modified: james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java
URL: 
http://svn.apache.org/viewcvs/james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java?rev=392373&r1=392372&r2=392373&view=diff
==============================================================================
--- james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java 
(original)
+++ james/server/trunk/src/test/org/apache/james/core/MimeMessageTest.java Fri 
Apr  7 12:50:54 2006
@@ -16,6 +16,7 @@
  ***********************************************************************/
 package org.apache.james.core;
 
+import org.apache.avalon.framework.container.ContainerUtil;
 import org.apache.mailet.RFC2822Headers;
 
 import javax.mail.BodyPart;
@@ -301,6 +302,25 @@
         } catch (Exception e) {
             fail("Unexpected exception in getLineCount");
         }
+    }
+    
+    /**
+     * This test throw a NullPointerException when the original message was 
created by
+     * a MimeMessageInputStreamSource.
+     */
+    public void testMessageCloningViaCoW() throws Exception {
+        MimeMessage mmorig = getSimpleMessage();
+        
+        MimeMessage mm = new MimeMessageCopyOnWriteProxy(mmorig);
+        
+        MimeMessage mm2 = new MimeMessageCopyOnWriteProxy(mm);
+        
+        mm2.setHeader("Subject", "Modified");
+        ContainerUtil.dispose(mm2);
+        //((Disposable)mail_dup.getMessage()).dispose();
+        
+        mm.setHeader("Subject", "Modified");
+        
     }
     
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to