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.