java.util.TimeZone's default implementation may cause many classes' 
serialization non-compatible with RI
--------------------------------------------------------------------------------------------------------

         Key: HARMONY-184
         URL: http://issues.apache.org/jira/browse/HARMONY-184
     Project: Harmony
        Type: Bug
  Components: Classlib  
    Reporter: Paulex Yang
    Priority: Critical


Static factory methods, java.util.TimeZone.getInstance(String) and 
getDefault(), are only ways to get a TimeZone instance, but Harmony and RI uses 
different classes as default implementation, which cause serialization 
non-compatible. Further, all classes whose serialization form includes TimeZone 
won't compatible with RI, too, for example, java.util.Calendar(with subclass), 
java.text.DateFormat(with subclass), etc.

But the incompatiblity is hard to be imputed to Harmony, because Harmony use 
API class SimpleTimeZone as default implementation, but RI use a non-API class, 
 whose full name is sun.util.calendar.ZoneInfo.

The reproduce procedure:
1. To serialize TimeZone object to a file in RI, run codes below in RI
public void writeObject(){
                TimeZone zone = TimeZone.getTimeZone("GMT");
                ObjectOutputStream ooutput = null;
                try {
                        ooutput = new ObjectOutputStream(new 
FileOutputStream("TimeZone.ser"));
                        ooutput.writeObject(zone);
                } finally {
                        try {
                                if (null != ooutput) {
                                        ooutput.close();
                                }
                        } catch (Exception e) {
                        }
                }
}

2. Trying to deserialize this object from file, run codes below
public void readObject(){
                ObjectInputStream oinput = null;
                try {
                        oinput = new ObjectInputStream(new 
FileInputStream("TimeZone.ser"));
                        TimeZone newObj = (TimeZone)oinput.readObject();
                } finally {
                        try {
                                if (null != oinput) {
                                        oinput.close();
                                }
                        } catch (Exception e) {
                        }
                }
}

Run in RI, passes without any failure
Run in Harmony, exception throwed as below:
java.lang.ClassNotFoundException: sun.util.calendar.ZoneInfo
        at java.lang.Class.forName(Class.java:154)
        at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2226)
... ...

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira

Reply via email to