George,

2006/3/7, George Harley <[EMAIL PROTECTED]>:
> Paulex Yang wrote:
> > This kind of serialization compatibility issue may be found again
> > later, if only RI use some non-API class as default implementation of
> > serializable abstract class. So I think we need some discussion on
> > this issue for a principle.
> >
> > I propose two choice:
> > 1. just let it be
> > 2. mimic a class as RI, in this TimeZone case, create a
> > sun.util.calendar.ZoneInfo by wrapping java.util.SimpleTimeZone, it
> > works but risky and ugly, it is risky because RI may change the
> > implementation class later(which will also break RI's serialization
> > compatibility of course)
> >
> > comments?
>
> Hi Paulex,
>
> When such RI->Harmony serialization incompatibilities come to light we
> can aim to deal with it in readObject() methods added to the affected

It is not quite clear, in which class you are going to deal with readObject() ?

Are you suggesting modification of IO framework that does serialization?

Thanks,
Mikhail

> types. This will have to be done on a case-by-case basis of course. In
> this particular case I could imagine that we could catch that
> ClassNotFoundException in the method and proceed on from there.
>
> But what about Harmony->RI serialization incompatibilities ? That is,
> what about Harmony applications serializing types to files and those
> files being later read in by applications running on a RI JRE ? In some
> cases we will probably "get away with it" as the differences in
> implementation will not break compatibility. For instance, running your
> test code so that Harmony produces the .ser file and the RI reads it in
> seemed to work fine for me. But the risk of problems will always be
> there. I am not certain that writing stubs of sun.* classes is a good
> direction to set off in to counter those risks. It would be better to
> try and work with the RI providers so that their classes can cope with
> serialized Harmony types.
>
> I wonder what lessons other class library development teams have learned
> in this area ?
>
> 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)
> >> ... ...
> >>
> >>
> >
> >
>
>

Reply via email to