当前位置: 首页 > news >正文

异常:java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

异常本质
jjwt-0.9.1 在生成签名时,需要调用 javax.xml.bind.DatatypeConverter.printBase64Binary(...) 做 Base64 编码。
JDK 9+ 开始 JAXB(java.xml.bind)被移出默认类路径,于是出现
java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter

一句话:老版本 jjwt 依赖了 JDK 8 自带、但 JDK 9+ 不再默认提供的 JAXB API。


最简修复方案(继续使用 jjwt-0.9.x)

pom.xml 把 JAXB 显式加回来:

<!-- 适用于 JDK 9/11/17/21 -->
<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<!-- 如果还缺实现,再加一个实现包 -->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.9</version>
</dependency>

刷新 Maven → 重启 → DatatypeConverter 能找到,异常消失。


根治方案(推荐)

jjwt-0.9.1 已停止维护,官方 0.10+ 以后改用自己实现的 Base64,彻底去掉 JAXB 依赖

  1. 升级依赖(Spring Boot 3.x 示例,jjwt 0.12.5)
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-api</artifactId><version>0.12.5</version>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-impl</artifactId><version>0.12.5</version><scope>runtime</scope>
</dependency>
<dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt-jackson</artifactId><version>0.12.5</version><scope>runtime</scope>
</dependency>
  1. 工具类微调(API 变化)
// 生成
String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS256, jwtProperties.getAdminSecretKey().getBytes(StandardCharsets.UTF_8)).setExpiration(new Date(System.currentTimeMillis() + jwtProperties.getAdminTtl())).compact();// 解析
Claims claims = Jwts.parserBuilder().setSigningKey(jwtProperties.getAdminSecretKey().getBytes(StandardCharsets.UTF_8)).build().parseClaimsJws(token).getBody();

升级后无论 JDK 8 还是 JDK 21 都不再需要 JAXB。


快速判断选哪种

场景做法
项目即将下线 / 懒得改代码jaxb-api 依赖,5 分钟搞定
长期维护 / 想跑 JDK 17+直接升 jjwt 0.12.x(或 1.0 GA)

把依赖改完、重新打包,日志里就不会再出现 DatatypeConverterClassNotFoundException 了。

http://www.dtcms.com/a/395165.html

相关文章:

  • Java-131 深入浅出 MySQL MyCat 深入解析 schema.xml 配置详解:逻辑库、逻辑表、数据节点全攻略
  • Vmware CentOS Docker Daemon配置代理
  • 【JAVA】java多态
  • 【AI分析进行时】大模型显存需求估算与国内开源模型实践指南
  • C++基础:(一)C++入门知识介绍(上)
  • Python项目的多语言翻译babel
  • python flask框架详解
  • 基于STM32单片机的家庭医护血氧体温血压吃药监测APP系统
  • 整合亮数据Bright Data与Dify构建自动化分析系统
  • Browser-Use+cpolar:企业网页操作自动化的无界解决方案
  • 深入理解 Elasticsearch:核心原理、性能优化与高频面试题解析
  • 【C++】Lambda表达式参数问题
  • 数学金融方向要额外学什么课?这个专业对编程和建模能力要求高吗?
  • 第二部分:VTK核心类详解(第54章 vtkVariantArray变体数组类)
  • 【2025最新】ArcGIS for JS点聚合功能实现
  • Leecode hot100 - 114. 二叉树展开为链表 基础方法到提高方法
  • 把 iOS 混淆纳入自动化测试与 CICD 从构建、回归到灰度的工程化实战
  • 初识Redis:解锁高性能缓存的魔法钥匙
  • 基于传递矩阵法计算多层结构声表面波声速
  • 中间件和分类
  • MV2DFusion:利用模态特定目标语义进行多模态三维检测
  • BeanFactory接口作用(二)
  • 速通ACM省铜第十二天 赋源码(Kirei Attacks the Estate)
  • 海外仓一件代发怎样优化拣货流程?用什么WMS能减少错拣漏拣?
  • SQL Server 定时作业
  • 大模型笔试选择题:题组1
  • 关于STL
  • clickhouse使用问题记录
  • Java 大视界:基于 Java 的大数据实时流处理在金融高频交易数据分析中的创新应用
  • 【脑电分析系列】第25篇:情绪识别与认知研究中的EEG应用:一个完整的实验设计与数据分析流程