You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2013/06/05 03:45:54 UTC

svn commit: r1489683 - in /geronimo/specs/trunk/geronimo-javamail_1.4_spec/src: main/java/javax/mail/MessagingException.java test/java/javax/mail/MessagingExceptionTest.java

Author: xuhaihong
Date: Wed Jun  5 01:45:53 2013
New Revision: 1489683

URL: http://svn.apache.org/r1489683
Log:
GERONIMO-6471 IllegalStateException : Cause already initialized is thrown while mail provider failed to connect or sent the messages

Modified:
    geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/MessagingException.java
    geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/test/java/javax/mail/MessagingExceptionTest.java

Modified: geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/MessagingException.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/MessagingException.java?rev=1489683&r1=1489682&r2=1489683&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/MessagingException.java (original)
+++ geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/main/java/javax/mail/MessagingException.java Wed Jun  5 01:45:53 2013
@@ -23,9 +23,9 @@ package javax.mail;
  * @version $Rev$ $Date$
  */
 public class MessagingException extends Exception {
-	
-	private static final long serialVersionUID = -7569192289819959253L;
-	
+
+    private static final long serialVersionUID = -7569192289819959253L;
+
     // Required because serialization expects it to be here
     private Exception next;
 
@@ -42,13 +42,12 @@ public class MessagingException extends 
         next = cause;
     }
 
-    public Exception getNextException() {
+    public synchronized Exception getNextException() {
         return next;
     }
 
     public synchronized boolean setNextException(Exception cause) {
         if (next == null) {
-            initCause(cause);
             next = cause;
             return true;
         } else if (next instanceof MessagingException) {
@@ -71,4 +70,12 @@ public class MessagingException extends 
                     + ")";
         }
     }
+    
+    /**
+     * MessagingException uses the nextException to provide a legacy chained throwable.
+     * override the getCause method to return the nextException.
+     */
+    public synchronized  Throwable getCause() {
+        return next;
+    }
 }

Modified: geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/test/java/javax/mail/MessagingExceptionTest.java
URL: http://svn.apache.org/viewvc/geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/test/java/javax/mail/MessagingExceptionTest.java?rev=1489683&r1=1489682&r2=1489683&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/test/java/javax/mail/MessagingExceptionTest.java (original)
+++ geronimo/specs/trunk/geronimo-javamail_1.4_spec/src/test/java/javax/mail/MessagingExceptionTest.java Wed Jun  5 01:45:53 2013
@@ -25,29 +25,51 @@ import junit.framework.TestCase;
  * @version $Revision $ $Date$
  */
 public class MessagingExceptionTest extends TestCase {
-    private RuntimeException d;
+    private RuntimeException e;
+    private MessagingException d;
     private MessagingException c;
     private MessagingException b;
     private MessagingException a;
     public MessagingExceptionTest(String name) {
         super(name);
     }
+    
     protected void setUp() throws Exception {
         super.setUp();
-        a = new MessagingException("A");
+        
+        //Initialize cause with null, make sure the getCause will not be affected
+        a = new MessagingException("A", null);
         b = new MessagingException("B");
         c = new MessagingException("C");
-        d = new RuntimeException("D");
+        d = new MessagingException("D");
+        e = new RuntimeException("E");
     }
+    
     public void testMessagingExceptionString() {
         assertEquals("A", a.getMessage());
     }
+    
     public void testNextException() {
         assertTrue(a.setNextException(b));
         assertEquals(b, a.getNextException());
+        assertEquals(b, a.getCause());
+        
         assertTrue(a.setNextException(c));
         assertEquals(b, a.getNextException());
         assertEquals(c, b.getNextException());
+        assertEquals(c, b.getCause());
+        
+        assertTrue(a.setNextException(d));
+        
+        assertEquals(b, a.getNextException());
+        assertEquals(b, a.getCause());
+        
+        assertEquals(c, b.getNextException());
+        assertEquals(c, b.getCause());
+        
+        assertEquals(d, c.getNextException());
+        assertEquals(d, c.getCause());
+        
         String message = a.getMessage();
         int ap = message.indexOf("A");
         int bp = message.indexOf("B");
@@ -56,14 +78,17 @@ public class MessagingExceptionTest exte
         assertTrue("B does not contain 'B'", bp != -1);
         assertTrue("C does not contain 'C'", cp != -1);
     }
+    
     public void testNextExceptionWrong() {
-        assertTrue(a.setNextException(d));
+        assertTrue(a.setNextException(e));
         assertFalse(a.setNextException(b));
     }
+    
     public void testNextExceptionWrong2() {
-        assertTrue(a.setNextException(d));
+        assertTrue(a.setNextException(e));
         assertFalse(a.setNextException(b));
     }
+    
     public void testMessagingExceptionStringException() {
         MessagingException x = new MessagingException("X", a);
         assertEquals("X (javax.mail.MessagingException: A)", x.getMessage());