RuedigerMoeller / fast-serialization

FST: fast java serialization drop in-replacement
Apache License 2.0
1.59k stars 247 forks source link

The data serialized by fst-2.16 cannot be deserialized by fst-2.57 #306

Open wenzhizhang opened 4 years ago

wenzhizhang commented 4 years ago

Hi team, I suffered the deserialization issue with fst-2.57, could you please have a look?

The data was serialized with fst-2.16 and stored in DB, when I tried to deserialize this data with fst-2.57 I got below error.

unable to decode:]À��#ú(com.dx.test.data.pojo.IpVersionú+com.dx.test.data.pojo.SecurityModeü
2020-10-30-T10:05:31.423+0200 |  |  | main            | ERROR | com.dx.test.nzdt.DataSyncApp | data sync is failed because of error.
org.redisson.client.RedisException: Failed to get NeInfo from DB for key:PLMN-PLMN/SBTS-111
        at com.dx.test.data.repo.ne.NeInfoRepo.get(NeInfoRepo.java:112)
        at com.dx.test.nzdt.repo.NeInfoForNA19AndLaterRepo.get(NeInfoForNA19AndLaterRepo.java:18)
        at com.dx.test.nzdt.repo.NeInfoForNA19AndLaterRepo.getAll(NeInfoForNA19AndLaterRepo.java:65)
        at com.dx.test.nzdt.ExportData.exportRegInfoForNA19OrLaterReleases(ExportData.java:57)
        at com.dx.test.nzdt.ExportData.exportData(ExportData.java:26)
        at com.dx.test.nzdt.DataSyncApp.main(DataSyncApp.java:49)
Caused by: java.io.IOException: java.lang.RuntimeException: unable to find class for code 93
        at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:247)
        at org.nustaq.serialization.FSTConfiguration.asObject(FSTConfiguration.java:1158)
        at com.dx.test.data.common.DataTypeConverter.bytesToObject(DataTypeConverter.java:45)
        at com.dx.test.data.dao.NeDao.select(NeDao.java:153)
        at com.dx.test.data.repo.ne.NeInfoRepo.getFromDB(NeInfoRepo.java:206)
        at com.dx.test.data.repo.ne.NeInfoRepo.get(NeInfoRepo.java:109)
        ... 5 more
Caused by: java.lang.RuntimeException: unable to find class for code 93
        at org.nustaq.serialization.FSTClazzNameRegistry.decodeClass(FSTClazzNameRegistry.java:180)
        at org.nustaq.serialization.coders.FSTStreamDecoder.readClass(FSTStreamDecoder.java:478)
        at org.nustaq.serialization.FSTObjectInput.readClass(FSTObjectInput.java:939)
        at org.nustaq.serialization.FSTObjectInput.readObjectWithHeader(FSTObjectInput.java:347)
        at org.nustaq.serialization.FSTObjectInput.readObjectInternal(FSTObjectInput.java:331)
        at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:311)
        at org.nustaq.serialization.FSTObjectInput.readObject(FSTObjectInput.java:245)
        ... 10 more

Are different encoding mechanisms used in the 2 versions?

Your support will be appreciated a lot.

Best regards, Wenzhi

RuedigerMoeller commented 4 years ago

Yes, its not compatible. Workaround (I did for similar projects)

you then can use 2.16 and 2.57 in parallel and write a conversion method.

wenzhizhang commented 3 years ago

Thank you very much, @RuedigerMoeller , I'll try this workaround in my project.

Best regards, Wenzhi