[ http://issues.apache.org/jira/browse/HARMONY-184?page=all ]

Paulex Yang updated HARMONY-184:
--------------------------------

    Attachment: TimeZone.ser

the serialized file generated by RI is attached.

> 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
>  Attachments: TimeZone.ser
>
> 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