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. 配置生成类的包名和输出目录
通过 packageName
和 sourceDestDir
可以分别指定生成类的包名和输出目录:
<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 获取。