File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Getting transient variable values while deserializing

 
Dinakar Kas
Ranch Hand
Posts: 34
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi all,

I have the following code:





It works fine.

Now, I made Employee as Singleton, and serializing and deserializing it.





When I made Employee as Singleton, while de-serialization, I was able to print the department name which is a transient variable(dept in Employee).

Am I going wrong anywhere?

Thanks
Dinakar
 
Christophe Verré
Sheriff
Pie
Posts: 14691
16
Eclipse IDE Ubuntu VI Editor
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Transient variables are not initialized after unmarshalling.

EDIT: I mean if you use a singleton. Transient variables would be implicitly initialized to their default values if a new instance was created.
 
Dinakar Kas
Ranch Hand
Posts: 34
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Transient variables would be implicitly initialized to their default values if a new instance was created.


But, I am not creating any new Employee object here. I am only unmarshalling it.

Also, even if I create a new Object(Employee here), as I did not specify any default value in it, it should still return null.

so where can be the problem?

Thanks,
Dinakar
 
Rob Spoor
Sheriff
Pie
Posts: 20371
44
Chrome Eclipse IDE Java Windows
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
One hint: return getInstance() from readResolve(), not emp. What if emp is still null?
 
Dinakar Kas
Ranch Hand
Posts: 34
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
return getInstance() from readResolve(), not emp. What if emp is still null?


Done it. Still Nope.
 
Rob Spoor
Sheriff
Pie
Posts: 20371
44
Chrome Eclipse IDE Java Windows
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I didn't say it would solve this issue. It's just very important because it will solve future errors.

readResolve means that the de-serialization process will not return the serialized object but the object returned by the method. This means that the non-serialized singleton instance will be returned, which still has its department set.
 
It is sorta covered in the JavaRanch Style Guide.
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic