Spring JAXB class not found error
What's inside this article
⌄
- Spring JAXB class not found
- NoClassDefFoundError JAXBException
- Spring JAXB dependency error
- Fix Sprint JAXB missing
If you’re facing this error:
Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/JAXBException
at org.hibernate.boot.spi.XmlMappingBinderAccess.<init>(XmlMappingBinderAccess.java:43)
at org.hibernate.boot.MetadataSources.getXmlMappingBinderAccess(MetadataSources.java:115)
at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.prepare(MetadataBuildingProcess.java:110)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:254)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:168)
at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:52)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:365)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:391)
at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:378)
at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:341)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1858)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1795)
... 98 more
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.JAXBException
at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
... 110 more
Then the reason is Java XML Binding, it is a tool for mapping between XML documents and Java objects.
These classes have been removed from internal of JDK since version 11 and moved to Jakarta EE.
This transition was happened with replacing javax to jakarta in package names. javax in your stacktrace tells us that you are using some old dependency, which uses old Java XML Binding classes.
Thus, you have at least three solutions.
First solution
Find out, which dependency utilizes old classes and upgrade that dependency.
Second solution
Switch to JDK 1.8, if it is ok for you. Remember the change JDK version in all places:
- JDK in PATH variable.
- JDK in IntelliJ IDEA Project settings: File → Project Structure → Project → SDK.
- JDK in use by Gradle: Settings → Build, Execution, Deployment → Gradle → Gradle JVM. Details are here.
Third solution
Explicitly include dependency javax.xml.bind:jaxb-api:2.3.0 to your project.