Java 服务器和客户端类之间的串行版本id不匹配问题

Java 服务器和客户端类之间的串行版本id不匹配问题,java,serialization,deserialization,serialversionuid,Java,Serialization,Deserialization,Serialversionuid,我面临串行版本id不匹配的问题 我的服务器有serialVersionID=20150301L的代码; myt客户机代码有差异,所以手动更改了它,但仍然面临相同的问题 错误: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.io.InvalidClassException: com.fedex.supplies.j2ee.common.client.reqresp.Cust

我面临串行版本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与服务器相同,但每次都会收到相同的错误。

尝试以下代码

private static final long serialVersionUID = 20150901L;
如果您不将其设置为私有、静态和最终,它将被忽略。

请尝试以下代码

private static final long serialVersionUID = 20150901L;


如果您不将其设置为
private
static
final
将被忽略。

如果您手动更改,则不会出现相同的错误。
本地类serialVersionUID
是您指定的数字。如果没有更改,您就没有正确设置并更新代码。您能告诉我们如何在代码中设置
serialVersionUID
吗?换句话说,您必须将其设置为流中的内容,
20150901L
。它必须是
private static final long
检查您的部署策略。确保部署的包/类与项目中使用的包/类相同。这意味着您不应该在两个不同的点上设置和编译SerialVersionID,而应该只在一个点上设置和编译SerialVersionID(并复制已编译的类,例如在jar中)。如果您手动更改它,它不会给出相同的错误。
本地类serialVersionUID
是您指定的数字。如果没有更改,您就没有正确设置并更新代码。您能告诉我们如何在代码中设置
serialVersionUID
吗?换句话说,您必须将其设置为流中的内容,
20150901L
。它必须是
private static final long
检查您的部署策略。确保部署的包/类与项目中使用的包/类相同。这意味着您不应该在两个不同的点上设置和编译SerialVersionID,而应该只在一个点上设置和编译SerialVersionID(并复制已编译的类,例如在jar中)。根据说明,它也必须是
final
@EJP谢谢您的更正和链接。我从未试图让它成为非最终版本我想我已经把它变成了非私有的了好几次。规范对此非常模糊,真的。@PeterLawrey不为我工作,显示出相同的错误;(@TaufikPirjade这是不可能的。您已经更改了本地classdesc。这不可能是与以前相同的错误,因为旧错误包含旧的本地classdesc。如果您更改它,它将从何处获得?您确定您正在运行新代码吗?根据说明,它也必须是
最终的
@EJP感谢您的更正和修改nk.我从来没有试图让它成为非最终版本。;(我想我已经让它成为非私有的了好几次了。规范对此非常模糊,真的。@PeterLawrey不为我工作,显示出相同的错误;(@TaufikPirjade)这是不可能的。您已更改了本地classdesc。这不可能是与以前相同的错误,因为旧错误包含旧的本地classdesc。如果您更改它,它将从何处获得?您确定正在运行新代码吗?