Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Spring Boot 3 throws NoClassDefFoundError - javax/xml/bind/annotation/XmlElement #459

Closed
NorbertSandor opened this issue Jul 21, 2022 · 6 comments
Assignees
Milestone

Comments

@NorbertSandor
Copy link

NorbertSandor commented Jul 21, 2022

The runtime error:

Caused by: java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
	at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:137) ~[jackson-module-jaxb-annotations-2.13.3.jar:2.13.3]
	at com.fasterxml.jackson.module.jaxb.JaxbAnnotationIntrospector.<init>(JaxbAnnotationIntrospector.java:124) ~[jackson-module-jaxb-annotations-2.13.3.jar:2.13.3]
	at com.fasterxml.jackson.module.jaxb.JaxbAnnotationModule.setupModule(JaxbAnnotationModule.java:98) ~[jackson-module-jaxb-annotations-2.13.3.jar:2.13.3]
	at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:853) ~[jackson-databind-2.13.3.jar:2.13.3]
	at com.fasterxml.jackson.databind.ObjectMapper.registerModules(ObjectMapper.java:1055) ~[jackson-databind-2.13.3.jar:2.13.3]
	at com.fasterxml.jackson.databind.ObjectMapper.findAndRegisterModules(ObjectMapper.java:1139) ~[jackson-databind-2.13.3.jar:2.13.3]
	at com.vladmihalcea.hibernate.type.util.ObjectMapperWrapper.<init>(ObjectMapperWrapper.java:33) ~[hibernate-types-60-2.17.0.jar:na]
	at com.vladmihalcea.hibernate.type.util.ObjectMapperWrapper.<clinit>(ObjectMapperWrapper.java:25) ~[hibernate-types-60-2.17.0.jar:na]
	at com.vladmihalcea.hibernate.type.util.Configuration.getObjectMapperWrapper(Configuration.java:157) ~[hibernate-types-60-2.17.0.jar:na]
	at com.vladmihalcea.hibernate.type.json.JsonBinaryType.<init>(JsonBinaryType.java:36) ~[hibernate-types-60-2.17.0.jar:na]
	at com.vladmihalcea.hibernate.type.json.JsonBinaryType.<clinit>(JsonBinaryType.java:30) ~[hibernate-types-60-2.17.0.jar:na]
	at com.vladmihalcea.hibernate.type.HibernateTypesContributor.contribute(HibernateTypesContributor.java:53) ~[hibernate-types-60-2.17.0.jar:na]
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:390) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
	at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:143) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:1350) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
	at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:1421) ~[hibernate-core-6.1.1.Final.jar:6.1.1.Final]
	at org.springframework.orm.jpa.vendor.SpringHibernateJpaPersistenceProvider.createContainerEntityManagerFactory(SpringHibernateJpaPersistenceProvider.java:57) ~[spring-orm-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.createNativeEntityManagerFactory(LocalContainerEntityManagerFactoryBean.java:362) ~[spring-orm-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.buildNativeEntityManagerFactory(AbstractEntityManagerFactoryBean.java:409) ~[spring-orm-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.orm.jpa.AbstractEntityManagerFactoryBean.afterPropertiesSet(AbstractEntityManagerFactoryBean.java:396) ~[spring-orm-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean.afterPropertiesSet(LocalContainerEntityManagerFactoryBean.java:338) ~[spring-orm-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1799) ~[spring-beans-6.0.0-M5.jar:6.0.0-M5]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1749) ~[spring-beans-6.0.0-M5.jar:6.0.0-M5]
	... 14 common frames omitted
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.XmlElement
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) ~[na:na]
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) ~[na:na]
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ~[na:na]
	... 37 common frames omitted

It seems that the included JAXB version is newer than 2.3.3 so it contains the >:-@ new package names:
image

@vladmihalcea
Copy link
Owner

The exception is thrown by JaxbAnnotationIntrospector from Jackson, so the Hibernate Types 6 module would probably need this jackson-module-jakarta-xmlbind-annotations dependency instead:

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
    <version>2.13.3</version>
</dependency>

@Tankonyako
Copy link

It also helped me to add jaxb-api, when adding only jackson-module-jakarta-xmlbind-annotations it gave the same error:

        <dependency>
            <groupId>com.fasterxml.jackson.module</groupId>
            <artifactId>jackson-module-jakarta-xmlbind-annotations</artifactId>
            <version>2.13.3</version>
        </dependency>

        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.4.0-b180830.0359</version>
        </dependency>

@hantsy
Copy link

hantsy commented Jul 26, 2022

Spring Boot 3.0.0-M4 requires a jakarta.xml.bind-api dep explicitly. The existing Spring Boot 2.x fixed this issue by including it since Java 9 was born. But not sure why this became an issue in the newest Spring Boot 3.0.0-M4.

<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>3.0.1</version>
</dependency>

@vladmihalcea vladmihalcea changed the title Spring Boot 3.0.0-M4 problem: NoClassDefFoundError: javax/xml/bind/annotation/XmlElement Spring Boot 3 throws NoClassDefFoundError - javax/xml/bind/annotation/XmlElement Jul 26, 2022
@vladmihalcea vladmihalcea self-assigned this Jul 26, 2022
@vladmihalcea vladmihalcea added this to the 2.17.1 milestone Jul 26, 2022
@vladmihalcea
Copy link
Owner

Fixed.

@abdurasul29052002
Copy link

abdurasul29052002 commented Mar 19, 2024

Now i created Spring boot 3.2.3 in gradle with Java 21. But it throws the same error.

@vladmihalcea
Copy link
Owner

@abdurasul29052002 Are you using the latest Hypersistence Utils dependency or the ancient com.vladmihalcea dependency that was abandoned 2 years ago?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants