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

Java17 Spring Boot项目突发jakarta/xml/bind/JAXBException错误排查求助

问题描述

基于Java 17的Spring Boot项目需调用SOAP API,依赖JAX-B实现相关功能。此前项目运行完全正常,但5天前在未修改任何代码的情况下,执行wsdl2javaTask任务时突然抛出java.lang.NoClassDefFoundError: jakarta/xml/bind/JAXBException错误。

完整错误栈

java.lang.NoClassDefFoundError: jakarta/xml/bind/JAXBException
    at com.sun.tools.ws.wscompile.WsimportTool.<init>(WsimportTool.java:103)
    at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:119)
    at com.sun.tools.ws.wscompile.WsimportTool.run(WsimportTool.java:105)
    at org.springframework.boot.gradle.tasks.ws.Wsdl2JavaTask.execWsImport(Wsdl2JavaTask.java:193)
    at org.springframework.boot.gradle.tasks.ws.Wsdl2JavaTask.execute(Wsdl2JavaTask.java:179)
    Caused by: java.lang.ClassNotFoundException: jakarta.xml.bind.JAXBException
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520)
    ... 5 more

项目build.gradle配置片段

plugins {
    id 'org.springframework.boot' version '3.1.0'
    id 'io.spring.dependency-management' version '1.1.0'
    id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'

java {
    sourceCompatibility = '17'
}

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web-services'
}

tasks.named('wsdl2java') {
    wsdlDir = file("src/main/resources/wsdl")
    generatedSourcesDir = file("build/generated-sources/wsdl2java")
}

排查分析与解决方案

1. 显式引入JAX-B依赖

Java 17已移除JAX-B相关模块,必须手动引入。若项目未锁定依赖版本,仓库中依赖的更新可能导致编译时缺失jakarta.xml.bind.JAXBException类。在dependencies块中添加:

implementation 'jakarta.xml.bind:jakarta.xml.bind-api:4.0.1'
runtimeOnly 'com.sun.xml.bind:jaxb-impl:4.0.1'
implementation 'jakarta.activation:jakarta.activation-api:2.1.2' // 部分场景需额外引入

2. 适配wsdl2java插件与Spring Boot版本

Spring Boot提供的wsdl2java任务依赖jaxws-tools,版本不兼容会引发类加载异常。显式指定工具版本:

dependencies {
    wsdl2java 'com.sun.xml.ws:jaxws-tools:4.0.1'
}

3. 清理本地仓库缓存

本地仓库的依赖可能因网络或缓存损坏无法加载,执行以下命令重置依赖:

./gradlew clean build --refresh-dependencies

同时删除本地仓库中jakarta/xml/bind相关目录,重新下载依赖。

4. 验证JDK环境配置

确认项目使用的JDK版本为17,执行命令检查:

./gradlew -version

确保输出中的JDK版本与配置一致,且JAVA_HOME指向正确的Java 17安装目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:35:22