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/17 20:49:17 UTC

svn commit: r1104459 - in /myfaces/core/trunk/api/src: main/java/javax/faces/application/FacesMessage.java test/java/javax/faces/application/FacesMessageTest.java

Author: jakobk
Date: Tue May 17 18:49:17 2011
New Revision: 1104459

URL: http://svn.apache.org/viewvc?rev=1104459&view=rev
Log:
MYFACES-3141 FacesMessage implements Serializable but cannot be serialized (applied patch with minor changes + some more comments; thx a lot to Matt Benson for providing this patch)

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

Modified: myfaces/core/trunk/api/src/main/java/javax/faces/application/FacesMessage.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/application/FacesMessage.java?rev=1104459&r1=1104458&r2=1104459&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/application/FacesMessage.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/application/FacesMessage.java Tue May 17 18:49:17 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.*;
 
@@ -101,7 +104,7 @@ public class FacesMessage implements Ser
         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;
     private boolean _rendered;
@@ -226,6 +229,31 @@ public class FacesMessage implements Ser
         _detail = detail;
     }
 
+    public boolean isRendered()
+    {
+        return _rendered;
+    }
+
+    public void rendered()
+    {
+        this._rendered = true;
+    }
+
+    private void writeObject(ObjectOutputStream out) throws IOException
+    {
+        out.defaultWriteObject();  // write summary, detail, rendered
+        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, rendered
+
+        // 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
     {
         private String _name;
@@ -254,14 +282,4 @@ public class FacesMessage implements Ser
         }
     }
 
-    public boolean isRendered()
-    {
-        return _rendered;
-    }
-
-    public void rendered()
-    {
-        this._rendered = true;
-    }
-
 }

Modified: myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMessageTest.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMessageTest.java?rev=1104459&r1=1104458&r2=1104459&view=diff
==============================================================================
--- myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMessageTest.java (original)
+++ myfaces/core/trunk/api/src/test/java/javax/faces/application/FacesMessageTest.java Tue May 17 18:49:17 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,33 @@ 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);
+        assertEquals(msg.isRendered(), false);
+
+        // 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());
+        assertEquals(msg.isRendered(), deserialized.isRendered());
+    }
+
 }