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