用于多个WSDL绑定的单个文件

时间:2016-08-11 14:18:34

标签: java web-services soap wsdl cxf

我目前正在使用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>

1 个答案:

答案 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>