java10运行springboot项目出现:Type javax.xml.bind.JAXBContext not present

原因:java9模块化的概念使得JAXB默认没有加载;

jaxb-api是存在jdk中的,只是默认没有加载而已,手动引入即可。

推荐方式:(作者采用的此方式)

<!-- jaxb模块引用 - start -->
<dependency>
   <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
</dependency>
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.0</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- jaxb模块引用 - end -->

java9模块命令方式:

--add-modles java.xml.bind

java9默认未加载模块:

javax.activation
javax.corba
javax.transaction
javax.xml.bind
javax.xml.ws
javax.xml.ws.annotation

推荐大家升级到JDK11,此为LTS版本(Oracle长期支持版本),BUG更少、兼容性更强


后记

升级到SpringBoot2.3后,spring-security-oauth2引入上述介绍的4个依赖将会报错如下错误:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.security.oauth2.provider.error.OAuth2AccessDeniedHandler]: Factory method 'oAuth2AccessDeniedHandler' threw exception; nested exception is java.lang.NoClassDefFoundError: com/sun/xml/bind/Util
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	at org.springframework.beans.factory.support.ConstructorResolver.instantiate(ConstructorResolver.java:650) ~[spring-beans-5.2.8.RELEASE.jar:5.2.8.RELEASE]
	... 33 common frames omitted
Caused by: java.lang.NoClassDefFoundError: com/sun/xml/bind/Util
	at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:113) ~[jaxb-impl-2.3.0.jar:2.3.3]
	at com.sun.xml.bind.v2.JAXBContextFactory.createContext(JAXBContextFactory.java:35) ~[jaxb-runtime-2.3.3.jar:2.3.3]
	at javax.xml.bind.ContextFinder.find(ContextFinder.java:404) ~[jaxb-api-2.3.1.jar:2.3.0]
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:721) ~[jaxb-api-2.3.1.jar:2.3.0]
	at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:662) ~[jaxb-api-2.3.1.jar:2.3.0]

正确依赖如下:

<!-- jaxb模块引用 - start -->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
</dependency>
<!-- jaxb模块引用 - end -->
阅读终点,创作起航,您可以撰写心得或摘录文章要点写篇博文。去创作
  • 19
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
### 回答1: 这个错误是Java程序中的一个异常,意思是缺少javax.xml.bind.jaxbcontext类型。这通常是由于缺少相关的库文件或类路径设置不正确导致的。要解决这个问题,可以尝试添加缺少的库文件或者检查类路径设置是否正确。 ### 回答2: java.lang.typenotpresentexception: type javax.xml.bind.jaxbcontext not present 是由于缺少所需的库或类文件造成的异常。这个异常通常出现运行需要使用 javax.xml.bind.JAXBContext 类的 Java 程序中。 javax.xml.bind.JAXBContext 类是 Java 中用于数据反序列化和序列化 XML 数据的类。如果在程序中使用了该类,但是缺少相应的依赖库或类文件,就会抛出 java.lang.typenotpresentexception 异常,指出该类未找到。 要解决这个问题,可以采取以下步骤: 1. 检查程序的依赖:检查程序所需的库是否已经添加到项目中,包括 javax.xml.bind 包所在的库。可以通过 Maven 或 Gradle 等构建工具来管理依赖关系,确保所需的库已正确添加。 2. 更新 Java 版本:JAXBContext 类是从 Java 6 开始的 Java 标准,如果你正在使用一个较旧的 Java 版本,可能会导致该异常。尝试将 Java 运行环境更新到最新版本,以确保 JAXBContext 类能够被正确加载。 3. 检查所使用的 IDE 或编辑器设置:一些 IDE 或编辑器可能需要额外的配置才能正确地解析 JAXBContext 类和相关依赖。确保 IDE 或编辑器中的设置正确,并且它们能够找到所需的类。 4. 检查类路径:如果以上步骤都没有解决问题,可能需要检查类路径是否正确设置。确保程序可以找到所需的类文件,并且它们能够被正确加载。 通过以上步骤进行排查和修复,应该能够解决 java.lang.typenotpresentexception: type javax.xml.bind.jaxbcontext not present 异常。如果问题仍然存在,可以考虑咨询相关的技术支持或寻求更多的帮助。 ### 回答3: java.lang.typenotpresentexception: type javax.xml.bind.jaxbcontext not presentJava运行时异常的一种,表示在程序运行时无法找到类型javax.xml.bind.JAXBContext。 这个异常通常出现在使用Java标准库中的XML绑定(XML Binding)相关功能时。JAXBJava提供的用于将Java对象与XML文档相互转换的API,而javax.xml.bind.JAXBContextJAXB的关键类。 通常情况下,Java运行时会提供这个类。但在某些情况下,可能由于以下原因导致找不到该类型: 1. Java运行时环境版本较低:某些较旧的Java版本可能不包含javax.xml.bind.JAXBContext类。解决办法是升级Java运行时环境到较新的版本。 2. 缺少相关的JAR文件:JAXB的实现通常需要相关的JAR文件支持,这些JAR文件可能缺失或不在类路径中。解决办法是确保相关的JAR文件已经添加到项目的构建路径中。 3. 模块化环境下的缺失:在Java 9及以上版本中,引入了模块化的概念,可能需要在模块路径中显式声明JAXB相关模块的依赖关系。解决办法是在模块描述文件(module-info.java)中添加对javax.xml.bind模块的requires语句。 处理这个异常的方法可以包括检查运行时环境版本、确保相关JAR文件存在并正确设置类路径、在模块化环境下检查模块依赖关系等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值