1

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

4

2 回答 2

3

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

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

Serializable仅当您希望能够使用 Java 的默认序列化机制(例如,RMI 使用的)对它们进行序列化/反序列化时,您的类才需要实现。

于 2012-08-17T07:56:03.083 回答
0

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

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

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

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

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

于 2012-08-17T08:16:52.850 回答