为JAXB中的每个生成的类生成唯一的可序列化id

时间:2014-12-15 05:41:07

标签: java serialization jaxb xjc wsimport

我正在使用ant wsimport从wsdls生成客户端存根。另外,我想生成实现Serializable的客户端类。我想为每个类生成一个不同的serialVersionUID。我尝试使用下面显示的绑定文件。但它为所有类生成相同的serialVersionUID。有什么方法可以给每个班级serialVersionUID一个吗?

<wsimport xendorsed="true" binding="binding.xml" debug="true" keep="true" 
verbose="false"  sourcedestdir="${generated}" wsdl="${src}${wsdl.file}"
wsdlLocation="${wsdl.file}">
</wsimport>

绑定配置

<bindings xmlns="http://java.sun.com/xml/ns/jaxb" version="2.0" xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <globalBindings>   
        <serializable uid="1" />        
    </globalBindings>    
</bindings>

2 个答案:

答案 0 :(得分:3)

仅供记录,无法为每个生成的类生成唯一的serialVersionUID因为这样做没有意义

让我解释一下: serialVersionUID代表您在特定时间点的班级版本。如果您修改了课程,则serialVersionUID应该更改。 因此,当JDK反序列化同一个类的对象时,它知道要将其反序列化的类的哪个版本。

对于JAXB,由于每次单独生成所有类都没有意义,所以每次都会生成所有类。仅仅因为他们只能作为一个团体改变。 (除非你将它们从目标文件夹中取出..)

我希望这更有意义。

答案 1 :(得分:2)

这是我们使用的绑定文件,它为我们提供了诀窍。

<xs:schema elementFormDefault="qualified" version="1.0"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" jaxb:version="2.0"
jaxb:extensionBindingPrefixes="xjc">
<xs:annotation>
    <xs:appinfo>
        <jaxb:globalBindings>
            <xjc:serializable />
        </jaxb:globalBindings>
    </xs:appinfo>
</xs:annotation>