2015-10-07 57 views
0

我遇到串行版本ID不匹配的问题。服务器和客户端类之间的串行版本ID不匹配问题

我的服务器的代码是serialVersionID = 20150301L; 和myt客户端代码有差异,所以手动更改它,但仍面临相同的问题。

错误:

java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.InvalidClassException: com.fedex.supplies.j2ee.common.client.reqresp.CustomerDataRequest; local class incompatible: stream classdesc serialVersionUID = 20150901L, local class serialVersionUID = -955959537118369236. 

我试着像实施serilizable选项,手动定义serialVersionID相同的服务器,但每次都得到同样的错误。

+1

如果您手动更改它,它不会给出相同的错误。 'local class serialVersionUID'是你指定的数字。如果它没有改变,你没有正确设置并更新你的代码。 –

+0

你能告诉我们如何在你的代码中设置'serialVersionUID'吗? –

+0

换句话说,您必须将其设置为流中的内容“20150901L”。 – EJP

回答

4

试试下面的代码

private static final long serialVersionUID = 20150901L; 

,如果你不让它privatestaticfinal它会被忽略。

+1

根据[对象序列化规范](http://docs.oracle.com/javase/7/docs/platform/serialization/spec/class.html#4100),它也必须是“final”。 – EJP

+0

@EJP感谢您的纠正和链接。我从来没有试图让它不是最终的。 ;) –

+0

我想我已经做了几次非'私人'。这个规范真的很模糊。 – EJP

相关问题