classpath
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Object serialization patch


From: Guilhem Lavaux
Subject: Re: Object serialization patch
Date: Mon, 23 Feb 2004 19:18:29 +0100
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.5) Gecko/20031007

Jeroen Frijters wrote:
Hi,

Here is a new patch I propose. I've taken the suggestion into account and fix another small error reporting problem.


I don't understand checkTypeConsistency, it looks odd and I'm having a
hard time believing that it is correct. BTW, Shouldn't "nonPrimitive" be
named "primitive"?

The problem if you sort fields using ObjectStreamField.compareTo is that you separate names which are alphabetically sorted. I will explain this on the following example.

Imagine that in the stream you have the following field names:

int a;
int e;
String b;
String d;

They will be sorted as: a, e, b, d. (They will be written as a1, e1, b1, d1).

Now the class may declare the same field names but with different types:

int a;
String e;
String b;
String d;

And they will be sorted as: a, b, d, e. (They will be written as a2, b2, d2, e2).

Now we want to check that the types are consistent between the stream and the class. Previously we compared a1 with a2, b1 with b2, d1 with d2 and the code was generating two more extra fields: e1 and e2 (aka int e and String e). They represent the same field but with two different types which is wrong.

Now checkTypeConsistency compares two field pools. We extract the non primitive fields F1 from the first pool and the primitive fields F2 from the second pool. If we find a field which has the same name both in F1 and F2 there is an inconsistency.

This operation must be done both when the first pool is the "stream" fields and the second pool the "class" fields, and when the roles are reversed.

I think that 'nonPrimitive' is correctly named as the primitive fields came in first and we are looking for the non primitive fields.


Also, I really don't like the type checking being done in the various
setXxxField methods, there is no reason to do this every time, it can be
done once when the fields are mapped.

Yes, I'm also not completely satisfied with this method. But there exists cases where it is needed. For example, if serialPersistentFields declares class types wrongly. The types are not checked previously in that case and this results in an IllegalArgumentException (which is wrong). The solution would be to check the types of all fields when we are building the ObjectStreamClass from serialPersistentFields.


Regards,
Guilhem.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]