我正在使用 wsimport 为 JAX-WS 网络服务调用生成客户端 stub
wsimport
有 -p
选项,允许自定义包的名称。
例如。如果 WSDL 具有 com.abc 的命名空间,那么您可以通过使用 -p com.pqr
命令行调用 wsimport
将 com.abc 替换为 com.pqr。
但是,只有当 wsdl 中只使用一个 namespace 时,这才能正常工作。
如果 wsdl 中有多个 namespace ,有没有办法用不同的包名称替换它们中的每一个。
例如。如果我希望将命名空间 com.abc.s1 替换为命名空间 com.pqr.s1 & 将命名空间 com.abc.s2 替换为命名空间 com.pqr.s2。
如果我使用 wsimport -p com.pqr.s1
,它会将所有生成的类放入 com.pqr.s1
有没有办法实现我想要的?
最佳答案
通常,您使用 jax-b 绑定(bind)文件为给定的 XSD 或 WSDL 自定义解码过程。绑定(bind)语言提供了 <package/>
用于自定义生成的模式包的指令。
给定单独的架构,在单独的文件中,您可以拥有一个看起来像这样的复合绑定(bind)文件:
<?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>
在哪里schemaLocation
将引用单个模式文件的位置,node
指的是绑定(bind)声明应该应用到的 XML 元素。 <jaxb:package/>
将定义输出包的名称。
然后您应该使用 -b
将绑定(bind)文件提供给 wsimport指令,你应该没问题
引用:
关于java - wsimport 客户端 - 自定义多个包名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27779697/