我正在尝试使用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>
答案 0 :(得分:1)
该问题与使用HTTP链接到WSDL文件无关。 CXF Codegen插件返回的错误是:
在wsdl:
中找不到任何服务webservicex
这是正常的,因为http://www.webservicex.com/globalweather.asmx?WSDL
托管的WSDL只有一个名为GlobalWeather
的服务;它没有名为webservicex
的服务。 WSDL corresponds to a wsdl:service
element中的服务定义,如果您查看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>
参数,因此您也可以将其删除,但它不会执行任何操作。