You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by de...@apache.org on 2018/05/08 12:49:17 UTC
[myfaces] 18/29: MYFACES-3141 FacesMessage implements Serializable
but cannot be serialized (merge changes in 1.1.x branch)
This is an automated email from the ASF dual-hosted git repository.
deki pushed a commit to branch 1.1.x
in repository https://gitbox.apache.org/repos/asf/myfaces.git
commit 192f6cd9ae5b9904862af74c9bc010b3fea695b1
Author: Jakob Korherr <ja...@apache.org>
AuthorDate: Wed May 18 19:37:27 2011 +0000
MYFACES-3141 FacesMessage implements Serializable but cannot be serialized (merge changes in 1.1.x branch)
---
.../java/javax/faces/application/FacesMessage.java | 20 +++++++++++++-
.../javax/faces/application/FacesMessageTest.java | 31 ++++++++++++++++++++++
2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/api/src/main/java/javax/faces/application/FacesMessage.java b/api/src/main/java/javax/faces/application/FacesMessage.java
index 6c017d8..39b45af 100755
--- a/api/src/main/java/javax/faces/application/FacesMessage.java
+++ b/api/src/main/java/javax/faces/application/FacesMessage.java
@@ -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.*;
@@ -62,7 +65,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;
@@ -131,6 +134,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
diff --git a/api/src/test/java/javax/faces/application/FacesMessageTest.java b/api/src/test/java/javax/faces/application/FacesMessageTest.java
index 73f28c3..9ee64c8 100644
--- a/api/src/test/java/javax/faces/application/FacesMessageTest.java
+++ b/api/src/test/java/javax/faces/application/FacesMessageTest.java
@@ -21,6 +21,10 @@ package javax.faces.application;
import junit.framework.TestCase;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
@@ -196,4 +200,31 @@ public class FacesMessageTest extends TestCase {
}
}
+ 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());
+ }
+
}
--
To stop receiving notification emails like this one, please contact
deki@apache.org.