繁体   English   中英

如何使用CXF wsdl2java为在线WSDL URL链接生成WebService客户端

[英]How to generate WebService client with CXF wsdl2java for online WSDL URL link

我正在尝试使用Apache CXF Maven插件的wsdl2java目标生成一个Web服务客户端。 我有一个WSDL URL链接,但在使用Maven插件时,它没有生成源。 示例WSDL链接是http://www.webservicex.com/globalweather.asmx?WSDL

<properties>
        <src.generated.dir>src/main/java</src.generated.dir>
        <artifact.cxf.version>3.1.6 </artifact.cxf.version>
        <xerces.version>2.11.0</xerces.version>
        <inbound.wsdl>http://www.webservicex.com/globalweather.asmx?WSDL</inbound.wsdl>
        <inbound.wsdl.location>http://www.webservicex.com/globalweather.asmx?WSDL</inbound.wsdl.location>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-codegen-plugin</artifactId>
                <version>${artifact.cxf.version}</version>
                <executions>
                    <execution>
                        <id>generate-sources</id>
                        <phase>generate-sources</phase>
                        <configuration>
                            <sourceRoot>${src.generated.dir}</sourceRoot>
                            <defaultOptions>
                                <noAddressBinding>true</noAddressBinding>
                                <faultSerialVersionUID>3105839350746982386</faultSerialVersionUID>
                            </defaultOptions>
                            <wsdlOptions>
                                <wsdlOption>
                                    <wsdl>${inbound.wsdl}</wsdl>
                                    <wsdlLocation>${inbound.wsdl.location}</wsdlLocation>
                                    <serviceName>webservicex</serviceName>
                                    <extraargs>
                                        <extraarg>-client</extraarg>
                                        <extraarg>-verbose</extraarg>
                                        <extraarg>-p</extraarg>
                                        <extraarg>http://webservicex.ent.com/arm/=com.ent.webservicex.arm</extraarg>
                                    </extraargs>
                                </wsdlOption>
                            </wsdlOptions>
                        </configuration>
                        <goals>
                            <goal>wsdl2java</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>xerces</groupId>
                        <artifactId>xercesImpl</artifactId>
                        <version>${xerces.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

该问题与使用HTTP链接到WSDL文件无关。 CXF Codegen插件返回的错误是:

在wsdl: webservicex找不到任何服务

这是正常的,因为在http://www.webservicex.com/globalweather.asmx?WSDL托管的WSDL只有一个名为GlobalWeather服务; 它没有名为webservicex的服务。 WSDL中的服务定义对应于wsdl:service元素 ,如果您查看WSDL,您将只看到

<wsdl:service name="GlobalWeather">
  <!-- ... -->
</wsdl:service>

因此,您应该将CXF配置更改为

<serviceName>GlobalWeather</serviceName>

甚至完全省略参数,让插件自动生成(因为只有一个服务)。


您当前配置还有其他相关说明,最好更改:

  • 永远不会在主源目录src/main/java生成代码,因为它目前已完成

     <src.generated.dir>src/main/java</src.generated.dir> 

    生成的代码应始终放在构建目录下(即默认为target )。 这是因为生成的代码不是真正的源文件,不应在版本控制中签入。 默认情况下,这就是插件正在做的事情,在target/generated-sources/cxf生成代码,我建议你继续使用; 因此,您只需要删除<sourceRoot>${src.generated.dir}</sourceRoot> 它还会自动将生成的源代码添加为源文件夹,因此所有内容仍然可以编译。

  • 您不需要插件的xerces依赖项,您可以删除插件的整个<dependencies>部分。

  • 没有<wsdlLocation>参数,因此您也可以删除它,它不会执行任何操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM