升级了jdk9之后,项目中写单点登录过程中报出了这个错误。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26)
at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilder.java:99)
at com.mszlu.blog.utils.JWTUtils.createToken(JWTUtils.java:20)
at com.mszlu.blog.utils.JWTUtils.main(JWTUtils.java:40)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter
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)
... 4 more
解决方法有两种:
- 在pom.xml引入jar包
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0</version>
</dependency>
<dependency>
<groupId>javax.activation</groupId>
<artifactId>activation</artifactId>
<version>1.1.1</version>
</dependency>
- 将jdk版本降低到1.6/1.7/1.8
嗯,老项目,升级classpath,升级gradle版本,出现了这个问题。
我解决这个问题的办法,就是去注释掉,classpath引入的,以及app下的build.gradle引入的插件,因为它是秒出的,没有到下载依赖包部分,所以可以排除文件冲突之类的。
经过我注释,发现是walle渠道打包引入的
apply plugin: 'walle'
它引入了一个classpath以及一个依赖包,经过我对比,发现他们版本号不一样,上github看了官方文档,把版本号改成一致就行了。可能新版编译更加严格吧,以往老编译器都是可以运行的。
出现这个问题的话,需要先找到引起这个问题的配置,可以用注释的方法
是由于缺少jaxb-api包导致的。在Java 8以及以前的版本,是默认包含jaxb这个jar包的;但是在java SE 9.0就不再包含着个包了,如果使用则需要手动引进。降低JDK版本到1.8。
在本地运行的很好,但是打包成jar包后运行,加载出首页后点击登录,就会报如下错误
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
at io.jsonwebtoken.impl.Base64Codec.decode(Base64Codec.java:26)
at io.jsonwebtoken.impl.DefaultJwtBuilder.signWith(DefaultJwtBuilde
接口访问时,错误提示全部内容是:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter] with root cause。
产生的原因:
我本地的JDK..
错误:Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
1. 降低JDK版本到1.8
2. 手动导入以下包:
转:解决java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter
开发遇到java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter的问题,pom没有报错,
网上搜索后,见到这篇文章,顺利解决问题,留存以备后查:
链接: https://www.cnblogs.com/smfx1314/p/11071718.html.
故障原因:
JAXB API是java EE 的
解决报错 Handler dispatch failed; nested exception is java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter