【问题标题】:How to generate WebService client with CXF wsdl2java for online WSDL URL link如何使用 CXF wsdl2java 为在线 WSDL URL 链接生成 WebService 客户端
【发布时间】:2017-05-30 07:19:26
【问题描述】:

我正在尝试使用 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>

【问题讨论】:

    标签: java maven cxf cxf-codegen-plugin


    【解决方案1】:

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

    在 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 中生成代码,我建议你继续这样做;因此,您只需删除&lt;sourceRoot&gt;${src.generated.dir}&lt;/sourceRoot&gt;。它还会自动将生成的源代码添加为源文件夹,因此一切仍将编译。

    • 您不需要 xerces 依赖项来使插件工作,您可以删除插件的整个 &lt;dependencies&gt; 部分。

    • 没有&lt;wsdlLocation&gt; 参数,所以你也可以删除它,它没有任何作用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多