我目前正在使用Apache CXF的cxf-codegen-plugin开发SOAP webservices客户端。由于我有多个WSDL,我需要将它绑定到我的java项目中的不同包。
我的问题是,是否可以为多个WSDL文件定义1个单个绑定文件?
以下是我的插件配置
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>${cxf.version}</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<defaultOptions>
<bindingFiles>
<bindingFile>src/main/resources/wsdl/bindings.xjb</bindingFile>
</bindingFiles>
</defaultOptions>
<sourceRoot>${basedir}/src/main/java</sourceRoot>
<wsdlRoot>src/main/resources/wsdl</wsdlRoot>
<includes>
<include>*.wsdl</include>
</includes>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>
我正在努力实现这样的目标,但无济于事
<jaxws:bindings
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"
xmlns="http://java.sun.com/xml/ns/jaxws">
<jaxws:bindings wsdlLocation="serviceA.wsdl" >
<jaxws:package name="org.ws.serviceA"/>
</jaxws:bindings>
<jaxws:bindings wsdlLocation="serviceB.wsdl" >
<jaxws:package name="org.ws.serviceB"/>
</jaxws:bindings>
</jaxws:bindings>
答案 0 :(得分:1)
事实证明,这个网站确实不可能并且明确说明
https://jax-ws.java.net/nonav/2.1.2/docs/customizations.html
1.1.1根绑定元素
jaxws:bindings声明显示为所有其他声明的根 绑定声明。这个顶级的jaxws:bindings元素必须 将WSDL文件的位置指定为值的URI wsdlLocation属性。
但是它没有指定有关子元素的wsdlLocation的任何内容。该网站有http://itdoc.hitachi.co.jp/manuals/3020/30203Y2310e/EY230286.HTM#ID00669
非root jaxws:绑定&gt; wsdlLocation&gt;属性不能 指定。即使指定了属性,也会被忽略。
希望将来可以改进,因为JAXB已经可以在一个文件中绑定多个schemaLocation,如下所示
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="schema1.xsd" node="//xsd:schema">
<jxb:schemaBindings>
<jxb:package name="org.package1" />
</jxb:schemaBindings>
</jxb:bindings>
<jxb:bindings schemaLocation="schema2.xsd" node="//xsd:schema">
<jxb:schemaBindings>
<jxb:package name="org.package2" />
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>