6

我知道如何使用 Apache CXF 生成客户端存根。但是,当我尝试运行生成的类时,它使用 JAXWS。另外,我注意到生成的类的导入类来自 javax 包。如何使用设置生成的类来使用 Apache CXF 库而不是 JAXWS 库?

下面是我用来生成客户端存根的代码:

wsdl2java -frontend jaxws21 -wsdlLocation "META-INF/wsdl/WSCustom.wsdl" -client -d C:\Workspace\WSClient\META-INF\wsdl\ "C:\Workspace\WSClient\META-INF\wsdl\WSCustom.wsdl"
4

1 回答 1

6

存根是正确的,其中不应该有任何特定于 CXF 的导入,因为 CXF 需要的所有信息都可以使用 JAX-WS 标准注释来表示。在运行时,如果 CXF 客户端库位于类路径上,则将使用它们;如果 CXF 不可用,则将使用 JDK 中内置的 RI 库。生成的存根将与其中任何一个一起使用。

您在评论中询问如果您只是在运行一个客户端,则需要哪些 CXF JAR——据我所知,这只是cxf-rt-frontend-jaxws加上cxf-rt-transports-http它们的传递依赖。如果您的项目是使用 maven 构建的,那么只需声明这两个依赖项,其他所有内容都应该自动进入,如果没有,则下载Apache Ivy 主 JAR然后运行

java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-frontend-jaxws 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar"
java -jar ivy-2.3.0.jar -dependency org.apache.cxf cxf-rt-transports-http 2.7.3 -retrieve "[artifact]-[revision](-[classifier]).jar"

这应该解决传递依赖关系并将相关 JAR 从 Maven Central 下载到当前目录。

于 2013-03-04T08:20:53.020 回答