local class incompatible: stream classdesc

B

babz

Hi everyone,

I am using eclipse IDE and i have two different projects A and B. I
serialize an object that belongs to project B and deserialize it later.
But I am doing this serialization/deserilization in project A.

I have two ways in project A to use the classes of project B.

OPTION 1: create a jar file of classes of project B and add it as an
external jar to project A.
OPTION 2: add project B to the build path of project A. (In this way i
have an access to the source code of project B as well. So changing
something in project B will not require me to create its jar file again
and refresh project A).

Then I have another application, call it C, that uses the jar files of
projects A and B. If I use option 1 and then create project A's jar and
project B's jar and give it to the application C, the
serialization/deserialization works. but if i use option 2 in eclipse
and build the respective jar files and try running the application with
these jar files, I get the following exception:

java.io.InvalidClassException:
com.cambridgedocs.jpdf.pdo.fonts.PdoTrueTypeFont; local class
incompatible: stream classdesc serialVersionUID = -3611946473283033478,
local class serialVersionUID = 387207963493818039
at java.io_ObjectStreamClass.initNonProxy(ObjectStreamClass.java:463)
at
java.io_ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1521)
at
java.io_ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
at
java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at java.io_ObjectInputStream.readObject(ObjectInputStream.java:324)
at

I want it to run it successfully through both ways

Can someone help??

Thanks,

Babz
 
N

Nigel Wade

babz said:
Hi everyone,

I am using eclipse IDE and i have two different projects A and B. I
serialize an object that belongs to project B and deserialize it later.
But I am doing this serialization/deserilization in project A.

I have two ways in project A to use the classes of project B.

OPTION 1: create a jar file of classes of project B and add it as an
external jar to project A.
OPTION 2: add project B to the build path of project A. (In this way i
have an access to the source code of project B as well. So changing
something in project B will not require me to create its jar file again
and refresh project A).

Then I have another application, call it C, that uses the jar files of
projects A and B. If I use option 1 and then create project A's jar and
project B's jar and give it to the application C, the
serialization/deserialization works. but if i use option 2 in eclipse
and build the respective jar files and try running the application with
these jar files, I get the following exception:

java.io.InvalidClassException:
com.cambridgedocs.jpdf.pdo.fonts.PdoTrueTypeFont; local class
incompatible: stream classdesc serialVersionUID = -3611946473283033478,
local class serialVersionUID = 387207963493818039
at java.io_ObjectStreamClass.initNonProxy(ObjectStreamClass.java:463)
at
java.io_ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1521)
at
java.io_ObjectInputStream.readClassDesc(ObjectInputStream.java:1435)
at
java.io_ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1626)
at java.io_ObjectInputStream.readObject0(ObjectInputStream.java:1274)
at java.io_ObjectInputStream.readObject(ObjectInputStream.java:324)
at

I want it to run it successfully through both ways

Can someone help??

Thanks,

Babz

OPTION 1 is the correct way to do things. Duplicating class files is not the way
to go. OPTION 2 has created two .class files for the same .java source file,
and each of them has a different UID.

However, you can make it work if you define a serialVersionUID for each class
that you wish to serialize. In fact Eclipse now warns you if you don't do this.

Just add the following at the start of each class which will be serialized:

private static final long serialVersionUID = <largenumber>L;

where <largenumber> is an arbitrary integer which is unique to each class. You
should do this for *every* class which is serialized, and that means classes
contained in other classes, including anonymous inner classes.
 
B

babz

Thnks Nigel. It works for me :)
Nigel said:
OPTION 1 is the correct way to do things. Duplicating class files is not the way
to go. OPTION 2 has created two .class files for the same .java source file,
and each of them has a different UID.

However, you can make it work if you define a serialVersionUID for each class
that you wish to serialize. In fact Eclipse now warns you if you don't do this.

Just add the following at the start of each class which will be serialized:

private static final long serialVersionUID = <largenumber>L;

where <largenumber> is an arbitrary integer which is unique to each class. You
should do this for *every* class which is serialized, and that means classes
contained in other classes, including anonymous inner classes.

--
Nigel Wade, System Administrator, Space Plasma Physics Group,
University of Leicester, Leicester, LE1 7RH, UK
E-mail : (e-mail address removed)
Phone : +44 (0)116 2523548, Fax : +44 (0)116 2523555
 
Joined
Feb 25, 2013
Messages
1
Reaction score
0
Caused by: java.io.InvalidClassException: com.XXX; local

Hi Nigel Wade,

I tried with the solution you have provided in this below mail. But it doesn't work for me. I am still getting same exception.

Any help greatly appreciated.

Thanks in advance

Regards
Krishna
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,739
Latest member
Clint8040

Latest Threads

Top