使用jdk9和Hibernate5时遇到java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException

在编写一个结构为Hibernate+DAO+Service+Servlet+JSP的maven小项目时

已经确保hibernate.cfg.xml关于数据层的配置没有问题

在某次需要与数据库交互的操作时,跳出了以下异常

java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
    org.hibernate.boot.spi.XmlMappingBinderAccess.(XmlMappingBinderAccess.java:43)
    org.hibernate.boot.MetadataSources.(MetadataSources.java:87)
    org.hibernate.cfg.Configuration.(Configuration.java:123)
    org.hibernate.cfg.Configuration.(Configuration.java:118)
    dao.impl.UserDAOImpl.userExists(UserDAOImpl.java:32)
    servlets.LoginServlet.doPost(LoginServlet.java:81)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    filters.TokenFilter.doFilter(TokenFilter.java:18)

java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1275)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1104)
    org.hibernate.boot.spi.XmlMappingBinderAccess.(XmlMappingBinderAccess.java:43)
    org.hibernate.boot.MetadataSources.(MetadataSources.java:87)
    org.hibernate.cfg.Configuration.(Configuration.java:123)
    org.hibernate.cfg.Configuration.(Configuration.java:118)
    dao.impl.UserDAOImpl.userExists(UserDAOImpl.java:32)
    servlets.LoginServlet.doPost(LoginServlet.java:81)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:660)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    filters.TokenFilter.doFilter(TokenFilter.java:18)

表明JAXB API classes没有找到(原本在jdk6时引入)

报错代码行为

Configuration config = new Configuration().configure();

显然不是本身语句的原因

需要注意的是,使用的是jdk9

JAXB API是java EE的API,而java EE的API不再包含对java SE 9的模块中,因此JAXB APIs不再包含在java SE 9的默认类路径中,因此引发了以上报错

原本想通过添加javax.xml.bind包或者在pom.xml中添加相关依赖的方式解决问题(添加依赖方式如下)

<dependency>
    <groupId>javax.xml.bindgroupId>
    <artifactId>jaxb-apiartifactId>
    <version>2.3.0version>
dependency>
但意外的是,仍然是相同的异常,问题仍没有解决。

因此,卸载了jdk9和jre9,重新安装jdk8和jre8。

重新运行项目,进行相同操作时,没有报相同的异常,问题得到解决。


你可能感兴趣的:(使用jdk9和Hibernate5时遇到java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException)