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.