基于Spring Boot 3 Jakarta依赖的WSDL2Java代码生成:生成集合参数Setter
问题描述
我正在为运行于Java 17/Spring Boot 3的项目从WSDL文件生成Java源码,使用如下Maven插件配置:
<plugin> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>4.0.1</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> <configuration> <packageName>io.test.lib</packageName> <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory> <wsdlFiles> <wsdlFile>my_wsdl.wsdl</wsdlFile> </wsdlFiles> <wsdlLocation>/my_wsdl.wsdl</wsdlLocation> <!-- <xjcArgs>--> <!-- <xjcArg>-Xsetters</xjcArg>--> <!-- </xjcArgs>--> </configuration> <!-- <dependencies>--> <!-- <dependency>--> <!-- <groupId>org.jvnet.jaxb2_commons</groupId>--> <!-- <artifactId>jaxb2-basics</artifactId>--> <!-- <version>1.11.1</version>--> <!-- </dependency>--> <!-- </dependencies>--> </plugin>
该配置可正常生成代码,但生成的Java文件中缺少集合类型参数的Setter方法。此前在Spring Boot 2中我使用注释掉的配置实现此功能,但现在已失效,请问如何解决此问题?
解决方案
由于Java 17/Spring Boot 3对应的JAX-WS、JAXB已升级为Jakarta EE规范,旧版本的jaxb2-basics不再兼容,需按以下步骤调整:
- 升级依赖版本:使用支持Jakarta EE和Java 17的
jaxb2-basics及工具包版本,推荐1.12.0及以上 - 补全插件配置:启用
xjcArgs并添加完整的依赖项
修改后的完整插件配置如下:
<plugin> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-maven-plugin</artifactId> <version>4.0.1</version> <executions> <execution> <goals> <goal>wsimport</goal> </goals> </execution> </executions> <configuration> <packageName>io.test.lib</packageName> <wsdlDirectory>${project.basedir}/src/main/resources/</wsdlDirectory> <wsdlFiles> <wsdlFile>my_wsdl.wsdl</wsdlFile> </wsdlFiles> <wsdlLocation>/my_wsdl.wsdl</wsdlLocation> <xjcArgs> <xjcArg>-Xsetters</xjcArg> <!-- 可选:添加链式调用的Setter,可取消注释下面一行 --> <!-- <xjcArg>-Xsetters-mode=chain</xjcArg> --> </xjcArgs> </configuration> <dependencies> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics</artifactId> <version>1.12.0</version> </dependency> <dependency> <groupId>org.jvnet.jaxb2_commons</groupId> <artifactId>jaxb2-basics-tools</artifactId> <version>1.12.0</version> </dependency> </dependencies> </plugin>
关键说明
jaxws-maven-plugin4.x版本依赖Jakarta EE 9+规范,旧版jaxb2-basics(1.11.x)仅支持Java EE的JAXB,无法兼容新命名空间jaxb2-basics-tools是XJC插件运行必需的工具包,必须添加到插件依赖中-Xsetters参数会为集合类型字段生成setXXX(List<Type> value)方法,补充默认生成的getXXX()和addXXX(Type value)方法
内容的提问来源于stack exchange,提问作者Chamila Wijayarathna
相关产品推荐
相关产品推荐

