【发布时间】:2011-09-25 07:04:03
【问题描述】:
使用wsimport 从我的WSDL 生成的类没有equals() 和hashcode() 方法。如何自定义和生成客户端类以获取 equals() 和 hashcode() 方法。
我不确定使用 JAXB 来实现这一点。
在 Axis2.0 生成的存根中生成了这些方法,但不确定为什么 JAXWS 中没有这样的基本方法!
【问题讨论】:
使用wsimport 从我的WSDL 生成的类没有equals() 和hashcode() 方法。如何自定义和生成客户端类以获取 equals() 和 hashcode() 方法。
我不确定使用 JAXB 来实现这一点。
在 Axis2.0 生成的存根中生成了这些方法,但不确定为什么 JAXWS 中没有这样的基本方法!
【问题讨论】:
您可以使用 JAXB2 Basics Plugin 生成 equals() 和 hashcode() 方法:
【讨论】:
有关其工作原理的更多信息。
我必须将类路径添加到 jaxb2-commons 并且没有它 wsimport 运行没有抱怨但什么也没有发生!添加如下类路径后
<path id="jaxb2-commons.classpath">
<fileset dir="${dir.toolchain}/noarch/jaxb2-basics-dist-0.6.0">
<include name="**/*.jar" />
</fileset>
</path>
以下 wsimport 按预期工作
<wsimport wsdl="@{dir-wsdl}/@{name-wsdl}"
taskname="wsimport-@{service}"
destdir="@{dest-dir}"
sourcedestdir="@{source-dest-dir}"
package="@{package}"
keep="@{keep}"
verbose="@{verbose}"
xdebug="@{xdebug}"
xnocompile="@{xnocompile}"
target="2.1">
<binding dir="@{dir-wsdl}" includes="bindings-wsdl-@{name-wsdl}.xml, bindings-schema-@{name-wsdl}.xml" />
<xjcArg value="-Xequals" />
<xjcArg value="-XhashCode" />
<xjcArg value="-XtoString" />
<!-- Generates per-package jaxb.index file which lists all of the schema-derived classes in this package.-->
<xjcArg value="-Xjaxbindex" />
<xjcArg value="-Xsetters" />
</wsimport>
【讨论】:
如果您希望在 maven 中使用 wsimport 生成 hashcode() 和 equals(),请查看有关如何生成值构造函数的答案,但也包括生成 hashcode() 和 equals() 的配置:
【讨论】: