【问题标题】:SOAP and need for Java serialVersionUIDSOAP 和需要 Java serialVersionUID
【发布时间】:2012-08-17 07:48:23
【问题描述】:

序列化是将对象定义转换为持久格式(其中格式是特定于平台的)的过程。跨网络传输的对象(RMI、EJB)需要可序列化。 SOAP 请求是基于 xml 的,而 JAXB 用于编组和解组对象 xml。代码质量插件提示我添加 SerialVersionUID。这是必需的吗? CXF/JAXB 内部是否需要这个?

【问题讨论】:

    标签: java soap jaxb cxf


    【解决方案1】:

    据我所知,JAXB 不需要它。您收到此警告是因为您的类实现了 Serializable,但 JAXB 不要求您的类为 Serializable

    如果没有其他原因需要您的类为 Serializable,您可以更改它们,使它们不实现 Serializable

    如果您希望能够使用 Java 的默认序列化机制(例如,RMI 使用的)序列化/反序列化它们,您的类只需要实现 Serializable

    【讨论】:

      【解决方案2】:

      JAXB 文档中没有提到需要显式添加 SerialVersionUID。

      SerialVersionUID 是每个 Serializable 类持有的版本号,用于反序列化以验证序列化对象的发送方和接收方是否保持兼容性,只要序列化关注加载的类。

      它不应该是必需的,因为编译器会自己生成一个 SerialVersionUID,所以你不用担心。

      计算对类细节非常敏感,因此两个不同的编译器可以计算不同的 SerialVersionUID,在这种情况下,JVN 可能会在反序列化过程中抛出 InvalidClassException。在这种情况下,您应该自己添加 SerialVersionUID。每次修改类时都必须更改 SerialVersionUID 以避免反序列化问题(这是因为如果您始终使用相同的编译器,最好不要指定 SerialVersionUID)。

      不要被您的 IDE 所说的误导,这是您根据项目开发要求做出的选择。

      【讨论】:

        猜你喜欢
        • 2011-11-15
        • 1970-01-01
        • 2015-08-23
        • 2012-03-10
        • 2017-06-01
        • 2013-05-05
        • 2018-03-17
        • 2018-04-23
        • 2010-11-28
        相关资源
        最近更新 更多