harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mikhail Loenko" <mloe...@gmail.com>
Subject Re: How to deal with this kind of serialization compatibility issue?
Date Tue, 07 Mar 2006 11:54:07 GMT
2006/3/7, George Harley <george.c.harley@googlemail.com>:
> I wonder what lessons other class library development teams have learned
> in this area ?

BTW, the problem with serialization of crypto keys (various implementations of
java.security.Key) was resolved in 1.5 by introducing a new class
java.security.KeyRep

I'd say
>> 1. just let it be

Thanks,
Mikhail

>
> Best regards,
> George
>
>
> >
> > Paulex Yang (JIRA) wrote:
> >> 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)
> >> ... ...
> >>
> >>
> >
> >
>
>

Mime
View raw message