1. 简介

在本教程中,我们将介绍如何配置 JAX-WS Maven 插件 来从 WSDL(Web Services Description Language)文件生成 Java 类。通过这种方式,我们可以方便地使用生成的类来调用 Web 服务接口。

2. 配置 Maven 插件

首先,在项目的 pom.xml 文件中添加 最新版本 的 JAX-WS Maven 插件,并使用其 wsimport 目标:

<build>
    <plugins>
        <plugin>
            <groupId>com.sun.xml.ws</groupId>
            <artifactId>jaxws-maven-plugin</artifactId>
            <version>4.0.2</version>
            <executions>
                <execution>
                    <goals>
                        <goal>wsimport</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

要点: wsimport 目标的作用是为 JAX-WS 客户端和服务生成可移植的 Java 工件。它会读取 WSDL 文件并生成调用、部署和开发 Web 服务所需的所有类文件。

2.1. 指定 WSDL 文件目录

在插件配置中,可以通过 wsdlDirectory 属性指定 WSDL 文件所在的目录。例如,我们可以将 WSDL 文件放在 src/main/resources/ 目录下:

<plugin>
    ...
    <configuration>
        <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
    </configuration>
</plugin>

2.2. 指定具体 WSDL 文件

如果只想处理特定的 WSDL 文件,可以通过 wsdlFiles 属性列出这些文件:

<plugin>
    ...
    <configuration>
        <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
        <wsdlFiles>
            <wsdlFile>file1.wsdl</wsdlFile>
            <wsdlFile>file2.wsdl</wsdlFile>
            ...
        </wsdlFiles>
    </configuration>
</plugin>

⚠️ 注意: 如果没有配置 wsdlFiles,插件会默认处理 wsdlDirectory 指定目录下的所有 WSDL 文件。

2.3. 使用远程 WSDL URL

我们也可以通过 wsdlUrls 属性指定远程的 WSDL 地址:

<plugin>
    ...
    <configuration>
        <wsdlUrls>
            <wsdlUrl>http://localhost:8888/ws/country?wsdl</wsdlUrl>
        ...
        </wsdlUrls>
    </configuration>
</plugin>

⚠️ 注意: 使用远程地址时,对应的 Web 服务必须处于运行状态,否则插件无法读取 WSDL 内容。

2.4. 配置生成类的包名和输出目录

通过 packageNamesourceDestDir 可以分别指定生成类的包名和输出目录:

<plugin>
    ...
    <configuration>
        <packageName>com.baeldung.soap.ws.client</packageName>
        <sourceDestDir>
            ${project.build.directory}/generated-sources/
        </sourceDestDir>
    </configuration>   
</plugin>

✅ 最终完整的插件配置如下:

<plugin>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-maven-plugin</artifactId>
    <version>4.0.2</version>
    <executions>
        <execution>
            <goals>
                <goal>wsimport</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory>
        <packageName>com.baeldung.soap.ws.client</packageName>
        <sourceDestDir>
            ${project.build.directory}/generated-sources/
        </sourceDestDir>
    </configuration>
</plugin>

3. 执行插件生成代码

配置完成后,执行 Maven 命令即可生成 Java 类:

mvn clean install

输出日志示例如下:

[INFO] --- jaxws:4.0.1:wsimport (default) @ jaxws ---
[INFO] Processing: file:/D:/projetos/baeldung/tutorials/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl
[INFO] jaxws:wsimport args: [-keep, -s, 'D:\projetos\baeldung\tutorials\maven-modules\maven-plugins\jaxws\target\generated-sources', -d, 'D:\projetos\baeldung\tutorials\maven-modules\maven-plugins\jaxws\target\classes', -encoding, UTF-8, -Xnocompile, -p, com.baeldung.soap.ws.client, "file:/D:/projetos/baeldung/tutorials/maven-modules/maven-plugins/jaxws/src/main/resources/country.wsdl"]
parsing WSDL...
Generating code...

4. 检查生成的类

执行完成后,可以在 target/generated-sources/ 目录下找到生成的 Java 类文件(由 sourceDestDir 指定),包路径为 com.baeldung.soap.ws.client(由 packageName 指定):

com.baeldung.soap.ws.client.Country.java
com.baeldung.soap.ws.client.CountryService.java  
com.baeldung.soap.ws.client.CountryServiceImplService.java
com.baeldung.soap.ws.client.Currency.java
com.baeldung.soap.ws.client.ObjectFactory.java

5. 总结

本文介绍了如何使用 JAX-WS Maven 插件从 WSDL 文件自动生成 Java 客户端代码。通过这种方式,我们可以快速构建 Web 服务客户端,并直接使用生成的类来调用远程服务。

源码可在 GitHub 获取。


原始标题:Generate WSDL Stubs with Maven | Baeldung