You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ja...@apache.org on 2011/05/18 21:31:56 UTC

svn commit: r1124393 - in /myfaces/core/branches/1.2.x/api/src: main/java/javax/faces/application/FacesMessage.java test/java/javax/faces/application/FacesMessageTest.java

Author: jakobk
Date: Wed May 18 19:31:56 2011
New Revision: 1124393

URL: http://svn.apache.org/viewvc?rev=1124393&view=rev
Log:
MYFACES-3141 FacesMessage implements Serializable but cannot be serialized (merge changes in 1.2.x branch)

Modified:
    myfaces/core/branches/1.2.x/api/src/main/java/javax/faces/application/FacesMessage.java
    myfaces/core/branches/1.2.x/api/src/test/java/javax/faces/application/FacesMessageTest.java

Modified: myfaces/core/branches/1.2.x/api/src/main/java/javax/faces/application/FacesMessage.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/1.2.x/api/src/main/java/javax/faces/application/FacesMessage.java?rev=1124393&r1=1124392&r2=1124393&view=diff
==============================================================================
--- myfaces/core/branches/1.2.x/api/src/main/java/javax/faces/application/FacesMessage.java (original)
+++ myfaces/core/branches/1.2.x/api/src/main/java/javax/faces/application/FacesMessage.java Wed May 18 19:31:56 2011
@@ -18,6 +18,9 @@
  */
 package javax.faces.application;
 
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.io.Serializable;
 import java.util.*;
 
@@ -54,7 +57,7 @@ public class FacesMessage
         VALUES = Collections.unmodifiableList(severityList);
     }
 
-    private FacesMessage.Severity _severity;
+    private transient FacesMessage.Severity _severity;  // transient, b/c FacesMessage.Severity is not Serializable
     private String _summary;
     private String _detail;
 
@@ -123,6 +126,21 @@ public class FacesMessage
         _detail = detail;
     }
 
+    private void writeObject(ObjectOutputStream out) throws IOException
+    {
+        out.defaultWriteObject();  // write summary, detail
+        out.writeInt(_severity._ordinal);  // FacesMessage.Severity is not Serializable, write ordinal only
+    }
+
+    private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
+    {
+        in.defaultReadObject();  // read summary, detail
+
+        // FacesMessage.Severity is not Serializable, read ordinal and get related FacesMessage.Severity
+        int severityOrdinal = in.readInt();
+        _severity = (Severity) VALUES.get(severityOrdinal - 1);
+    }
+
 
     public static class Severity
             implements Comparable

Modified: myfaces/core/branches/1.2.x/api/src/test/java/javax/faces/application/FacesMessageTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/1.2.x/api/src/test/java/javax/faces/application/FacesMessageTest.java?rev=1124393&r1=1124392&r2=1124393&view=diff
==============================================================================
--- myfaces/core/branches/1.2.x/api/src/test/java/javax/faces/application/FacesMessageTest.java (original)
+++ myfaces/core/branches/1.2.x/api/src/test/java/javax/faces/application/FacesMessageTest.java Wed May 18 19:31:56 2011
@@ -22,6 +22,10 @@ package javax.faces.application;
 import junit.framework.TestCase;
 
 import javax.faces.application.FacesMessage.Severity;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
 import java.util.Map;
 
 public class FacesMessageTest extends TestCase
@@ -208,4 +212,31 @@ public class FacesMessageTest extends Te
         }
     }
 
+    public void testSerialization() throws Exception
+    {
+        final String summary = "summary";
+        final String detail = "detail";
+        FacesMessage msg = new FacesMessage(summary, detail);
+
+        // check if properties are set correctly
+        assertEquals(msg.getSeverity(), FacesMessage.SEVERITY_INFO);
+        assertEquals(msg.getSummary(), summary);
+        assertEquals(msg.getDetail(), detail);
+
+        // serialize instance
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        ObjectOutputStream out = new ObjectOutputStream(baos);
+        out.writeObject(msg);
+        out.close();
+
+        // deserialize instance
+        ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(baos.toByteArray()));
+        FacesMessage deserialized = (FacesMessage) in.readObject();
+
+        // FacesMessage properties must equal!
+        assertSame(msg.getSeverity(), deserialized.getSeverity());
+        assertEquals(msg.getSummary(), deserialized.getSummary());
+        assertEquals(msg.getDetail(), deserialized.getDetail());
+    }
+
 }