我正在使用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>
答案 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>