wsimport客户端 - 自定义多个包名称

use*_*353 7 java wsdl web-services jax-ws wsimport

我正在使用wsimport为JAX-WS webservice调用生成客户端存根

wsimport-p选项,允许自定义包的名称.

例如.如果WSDL具有com.abc的命名空间,则可以通过wsimport使用-p com.pqr命令行调用com.abq来替换com.abc .

但是,只有在wsdl中只使用一个命名空间时,这才能正常工作.
如果wsdl中有多个名称空间,是否有办法用不同的包名替换每个名称空间.

例如.如果我希望命名空间com.abc.s1被命名空间com.pqr.s1和命名空间com.abc.s2替换为命名空间com.pqr.s2.

如果我使用wsimport -p com.pqr.s1,它会将所有生成的类放入com.pqr.s1

有没有办法实现我想要的?

kol*_*sus 6

通常,您使用 jax-b 绑定文件来自定义给定 XSD 或 WSDL 的解组过程。绑定语言提供了<package/>用于定制模式的生成包的指令。

给定单独的架构,在单独的文件中,您可以拥有一个如下所示的复合绑定文件:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="Flight.xsd"  node="/xsd:schema">
    <jaxb:schemaBindings>
      <jaxb:package name="travel.flight"/>
    </jaxb:schemaBindings>
  </jaxb:bindings>
  <jaxb:bindings schemaLocation="Hotel.xsd" node="/xsd:schema">
    <jaxb:schemaBindings>
      <jaxb:package name="travel.hotel"/>
    </jaxb:schemaBindings>
  </jaxb:bindings>
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)

whereschemaLocation将指代各个模式文件的位置,node指的是绑定声明应该应用于的 XML 元素。<jaxb:package/>将定义输出包的名称。

然后你应该使用指令将绑定文件提供给wsimport-b,你应该没问题

参考: