You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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>

关键说明

  1. jaxws-maven-plugin 4.x版本依赖Jakarta EE 9+规范,旧版jaxb2-basics(1.11.x)仅支持Java EE的JAXB,无法兼容新命名空间
  2. jaxb2-basics-tools是XJC插件运行必需的工具包,必须添加到插件依赖中
  3. -Xsetters参数会为集合类型字段生成setXXX(List<Type> value)方法,补充默认生成的getXXX()和addXXX(Type value)方法

内容的提问来源于stack exchange,提问作者Chamila Wijayarathna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:20:39