2015-10-07 50 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

相關問題