Serializing/de-serializing with different classes using Msgpack (Java API) -


i'm experimenting msgpack de-serialize object graph using msgpack hitting problems.

at moment have simple hierachy consisting of 2 classes: basemessage , personnew. basemessage has single long field id getters , setters. personnew has string fields name , email , inherits basemessage.

originally personold class had id field , serialized/de-serialized fine. when tring de-serialize personold (which had id) personnew class (which inherits id basemessage) i'm being hit error:

org.msgpack.messagetypeexception: unexpected raw value 

all fields i'm using private.

below sample code:

    personold personold = new personold();     personold.setname("person");     personold.setemail("person@email.com");      messagepack msgpack = new messagepack();     msgpack.register(personnew.class);     msgpack.register(personold.class);      // serialize using old person class     byte[] personbytes = msgpack.write(personold);      bytearrayinputstream in = new bytearrayinputstream(personbytes);     unpacker unpacker = msgpack.createunpacker(in);      // deserialize using new person class     personnew deserializeperson = unpacker.read(personnew.class); 

the reason i'd de-serialize newer class because want see if it's possible have older serialized data (e.g. in persisted message queue) compatible newer classes (e.g. in case of class updates). have attempted use @optional annotation on id of basemessage class still doesn't work.

is possible @ de-serialize different class despite having same fields?

regards,

snk


Comments

Popular posts from this blog

python - Subclassed QStyledItemDelegate ignores Stylesheet -

java - HttpClient 3.1 Connection pooling vs HttpClient 4.3.2 -

SQL: Divide the sum of values in one table with the count of rows in another -