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

升级Apache CXF 4.0.3至4.0.4后构建失败:wsdl2java目标执行报错

Apache CXF 4.0.4升级后wsdl2java构建失败解决办法

问题背景

将Apache CXF从4.0.3升级至4.0.4后,项目构建执行cxf-codegen-plugin:wsdl2java目标时失败,错误信息如下:

Failed to execute goal org.apache.cxf:cxf-codegen-plugin:4.0.4:wsdl2java (generate-sources) on project
Exit code: 1
Command line was: /opt/tools/java/jdk17.0.4.1_linux-x64/bin/java --add-exports=jdk.xml.dom/org.w3c.dom.html=ALL-UNNAMED --add-exports=java.xml/com.sun.org.apache.xerces.internal.impl.xs=ALL-UNNAMED --add-opens java.base/java.security=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.util=ALL-UNNAMED --add-opens java.base/java.util.concurrent=ALL-UNNAMED -jar /tmp/GSCLAIMS-GCCDATASERVICE183-TESTANDPUBLISH/cxf-tmp-12338135658495952580/cxf-codegen4068116116883184370.jar /tmp/GSCLAIMS-GCCDATASERVICE183-TESTANDPUBLISH/cxf-tmp-12338135658495952580/cxf-w2j11416424235311688218args

构建失败前出现的警告内容为:

[WARNING] 注入org.apache.cxf.maven_plugin.WSDL2JavaMojo时出错
com.google.inject.ProvisionException: 无法完成注入,错误如下:

  1. 注入构造函数时出错,java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    at org.apache.cxf.maven_plugin.WSDL2JavaMojo.(WSDL2JavaMojo.java:423)
    while locating org.apache.cxf.maven_plugin.WSDL2JavaMojo

问题原因

CXF 4.x版本全面迁移至Jakarta EE规范,不再依赖Java EE的JAXB API;而Java 17已移除内置的JAXB模块,同时4.0.4版本的cxf-codegen-plugin默认未包含Jakarta JAXB相关依赖,导致代码生成时找不到必要的绑定类。

解决步骤

1. 给cxf-codegen-plugin添加Jakarta JAXB依赖

在Maven的插件配置中,为cxf-codegen-plugin加入Jakarta XML Binding的API和运行时实现依赖,确保插件能找到必要的类:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>4.0.4</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
            <configuration>
                <!-- 保留你原本的WSDL路径等配置 -->
            </configuration>
        </execution>
    </executions>
    <dependencies>
        <!-- Jakarta JAXB API -->
        <dependency>
            <groupId>jakarta.xml.bind</groupId>
            <artifactId>jakarta.xml.bind-api</artifactId>
            <version>4.0.1</version>
        </dependency>
        <!-- JAXB运行时实现 -->
        <dependency>
            <groupId>org.glassfish.jaxb</groupId>
            <artifactId>jaxb-runtime</artifactId>
            <version>4.0.4</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</plugin>

2. 替换项目中旧的Java EE JAXB依赖

检查项目的依赖列表,若存在javax.xml.bind:jaxb-api这类Java EE版本的JAXB依赖,全部替换为Jakarta版本:

<!-- 移除旧依赖 -->
<!-- <dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency> -->

<!-- 添加Jakarta版本依赖 -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>4.0.1</version>
</dependency>

3. 清理构建缓存后重试

清理Maven本地仓库的缓存和项目构建临时文件,避免旧依赖干扰:

mvn clean install -U

补充说明

CXF 4.x与3.x的核心差异是包名从javax.*切换为jakarta.*,所有涉及Java EE规范的组件(如JAXB、JAX-WS等)都需要同步升级到Jakarta版本,才能保证兼容性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 17:03:19