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());
+ }
+
}