swagger-api / swagger-core

Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API

Home Page:http://swagger.io

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

SwaggerAnnotationIntrospector does not support JakartaEE apis

davsclaus opened this issue · comments

This class has been compiled with javax APIs for JAXB and therefore it does not work with Java frameworks that are JakartaEE based.

At Apache Camel 4.x we are JakartaEE and this causes problems for us, as we see the following kind of exceptions

2024-02-28 20:00:56.257 ERROR 42014 --- [ntloop-thread-0] io.vertx.ext.web.RoutingContext     : Unhandled exception in router
java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlElement
	at io.swagger.v3.core.jackson.SwaggerAnnotationIntrospector.hasRequiredMarker(SwaggerAnnotationIntrospector.java:29) ~[swagger-core-2.2.17.jar:2.2.17]
	at com.fasterxml.jackson.databind.introspect.AnnotationIntrospectorPair.hasRequiredMarker(AnnotationIntrospectorPair.java:339) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertyBuilder.getMetadata(POJOPropertyBuilder.java:230) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._anyIndexed(POJOPropertiesCollector.java:1333) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector._sortProperties(POJOPropertiesCollector.java:1235) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.collectAll(POJOPropertiesCollector.java:496) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getJsonValueAccessor(POJOPropertiesCollector.java:286) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.POJOPropertiesCollector.getJsonValueMethod(POJOPropertiesCollector.java:412) ~[jackson-databind-2.16.1.jar:2.16.1]
	at com.fasterxml.jackson.databind.introspect.BasicBeanDescription.findJsonValueMethod(BasicBeanDescription.java:252) ~[jackson-databind-2.16.1.jar:2.16.1]
	at io.swagger.v3.core.jackson.ModelResolver.findJsonValueType(ModelResolver.java:1055) ~[swagger-core-2.2.17.jar:2.2.17]
	at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:401) ~[swagger-core-2.2.17.jar:2.2.17]
	at org.apache.camel.openapi.RestModelConverters$ClassNameExtensionModelResolver.resolve(RestModelConverters.java:124) ~[camel-openapi-java-4.5.0-SNAPSHOT.jar:4.5.0-SNAPSHOT]
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-2.2.17.jar:2.2.17]
	at io.swagger.v3.core.converter.ModelConverters.readAll(ModelConverters.java:132) ~[swagger-core-2.2.17.jar:2.2.17]
	at io.swagger.v3.core.converter.ModelConverters.readAll(ModelConverters.java:123) ~[swagger-core-2.2.17.jar:2.2.17]
	at org.apache.camel.openapi.RestModelConverters.readClassOpenApi3(RestModelConverters.java:84) ~[camel-openapi-java-4.5.0-SNAPSHOT.jar:4.5.0-SNAPSHOT]
	at org.apache.camel.openapi.RestModelConverters.readClass(RestModelConverters.java:73) ~[camel-openapi-java-4.5.0-SNAPSHOT.jar:4.5.0-SNAPSHOT]
	at org.apache.camel.openapi.RestOpenApiReader.appendModels(RestOpenApiReader.java:969) ~[camel-openapi-java-4.5.0-SNAPSHOT.jar:4.5.0-SNAPSHOT]

Maybe this class can be made to discover the annotation class in a way where it can work with both javax and jakarta ee.

PS: we have also tried with 2.2.20 release, but this 2.2.17 release is what jackson-databind brings in.

Okay sorry it seems it may be that the

            <groupId>io.swagger.parser.v3</groupId>
            <artifactId>swagger-parser</artifactId>
            <version>${swagger-openapi3-java-parser-version}</version>

bring in the non-jakarta core dependencies that get mixed up. I wonder if there should be a swagger-parser-jakarta so you can ensure everything is jakarta based.

Yes it was that problem. However the request for a swagger-parser-jakarta would be appreciated thanks. Today we have to do a lot of maven exclude to ensure that only -jakarta is on the classpath.

Found ticket in parser about this, see: swagger-api/swagger-parser#1981