0

I'm using Spring boot 3.1.2. I try to extend jakarta.ws.rs.core.Application with custom implementation but the @ApplicationPath is not recognized.

Also the controller with @Path (jakarta.ws.rs.Path) and @GET(jakarta.ws.rs.GET) is not recognized but with @RestController and @GetMapping works fine.

Filters are not working as well.

@ApplicationPath("/sample")
@Configuration
public class JerseyApplication extends Application {

    public JerseyApplication(@Context ServletConfig servletConfig) {
        super();
        OpenAPI oas = new OpenAPI();
        Info info = new Info()
                .title("Swagger Sample App bootstrap code")
                .description("This is a sample server Petstore server.  You can find out more about Swagger " +
                        "at [http://swagger.io](http://swagger.io) or on [irc.freenode.net, #swagger](http://swagger.io/irc/).  For this sample, " +
                        "you can use the api key `special-key` to test the authorization filters.")
                .termsOfService("http://swagger.io/terms/")
                .contact(new Contact()
                        .email("apiteam@swagger.io"))
                .license(new License()
                        .name("Apache 2.0")
                        .url("http://www.apache.org/licenses/LICENSE-2.0.html"));

        oas.info(info);
        SwaggerConfiguration oasConfig = new SwaggerConfiguration()
                .openAPI(oas)
                .prettyPrint(true)
                .alwaysResolveAppPath(true)
                .resourcePackages(Stream.of("com.test.resources").collect(Collectors.toSet()));


        try {
          
            new JaxrsOpenApiContextBuilder()
                    .servletConfig(servletConfig)
                    .application(this)
                    .resourcePackages(Stream.of("com.test.resources").collect(Collectors.toSet()))
                    .openApiConfiguration(oasConfig)
                    .buildContext(true);
                   
        } catch (OpenApiConfigurationException e) {
            throw new RuntimeException(e.getMessage(), e);
        }

    }

    @Override
    public Set<Class<?>> getClasses() {
        return Stream.of(RequestIdHeaderFilter.class, Resource.class, OpenApiResource.class, AcceptHeaderOpenApiResource.class).collect(Collectors.toSet());
    }

Filters:

@Provider
@Priority(0)
@PreMatching
@Component
public class RequestIdHeaderFilter implements ContainerResponseFilter, ContainerRequestFilter {


    @Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext) {
        if (StringUtils.isEmpty(responseContext.getHeaderString(Constants.REQUEST_ID))) {
            responseContext.getHeaders().add(Constants.REQUEST_ID, MDC.get(Constants.REQUEST_ID));
        }
    }
}

REST Controller:

@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
@Path("/test")
public class SwaggerTestResource {

    @GET
    @Path("/hello")
    @Operation(summary = "Test for swagger",
            description = "This is a test resource returning Hello World!!",
            responses = {
                    @ApiResponse(description = "The user",
                            content = @Content(mediaType = "application/json")),
                    @ApiResponse(responseCode = "400", description = "Bad Request"),
                    @ApiResponse(responseCode = "404", description = "Service not found")
            })

    public String getTestService() throws Exception{
        final String response = "Hello World!!";
        return response;
    }
}

dependency tree as below:

[INFO] +- org.springframework.boot:spring-boot-starter-web:jar:3.1.2:compile          
[INFO] |  +- org.springframework.boot:spring-boot-starter:jar:3.1.2:compile           
[INFO] |  |  +- org.springframework.boot:spring-boot:jar:3.1.2:compile                
[INFO] |  |  +- org.springframework.boot:spring-boot-autoconfigure:jar:3.1.2:compile  
[INFO] |  |  +- org.springframework.boot:spring-boot-starter-logging:jar:3.1.2:compile
[INFO] |  |  |  +- ch.qos.logback:logback-classic:jar:1.4.8:compile                   
[INFO] |  |  |  |  \- ch.qos.logback:logback-core:jar:1.4.8:compile                   
[INFO] |  |  |  +- org.apache.logging.log4j:log4j-to-slf4j:jar:2.20.0:compile         
[INFO] |  |  |  |  \- org.apache.logging.log4j:log4j-api:jar:2.20.0:compile           
[INFO] |  |  |  \- org.slf4j:jul-to-slf4j:jar:2.0.7:compile
[INFO] |  |  \- jakarta.annotation:jakarta.annotation-api:jar:2.1.1:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-json:jar:3.1.2:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jdk8:jar:2.15.2:compile
[INFO] |  |  +- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.15.2:compile
[INFO] |  |  \- com.fasterxml.jackson.module:jackson-module-parameter-names:jar:2.15.2:compile
[INFO] |  \- org.springframework.boot:spring-boot-starter-tomcat:jar:3.1.2:compile
[INFO] |     +- org.apache.tomcat.embed:tomcat-embed-core:jar:10.1.11:compile
[INFO] |     +- org.apache.tomcat.embed:tomcat-embed-el:jar:10.1.11:compile
[INFO] |     \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:10.1.11:compile
[INFO] +- org.springframework.boot:spring-boot-starter-jersey:jar:3.1.2:compile
[INFO] |  +- org.springframework.boot:spring-boot-starter-validation:jar:3.1.2:compile
[INFO] |  |  \- org.hibernate.validator:hibernate-validator:jar:8.0.1.Final:compile
[INFO] |  |     \- com.fasterxml:classmate:jar:1.5.1:compile
[INFO] |  +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:3.1.2:compile
[INFO] |  |  +- jakarta.inject:jakarta.inject-api:jar:2.0.1:compile
[INFO] |  |  +- org.glassfish.jersey.core:jersey-common:jar:3.1.2:compile
[INFO] |  |  |  \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.3:compile
[INFO] |  |  \- jakarta.ws.rs:jakarta.ws.rs-api:jar:3.1.0:compile
[INFO] |  +- org.glassfish.jersey.containers:jersey-container-servlet:jar:3.1.2:compile
[INFO] |  +- org.glassfish.jersey.core:jersey-server:jar:3.1.2:compile
[INFO] |  |  +- org.glassfish.jersey.core:jersey-client:jar:3.1.2:compile
[INFO] |  |  \- jakarta.validation:jakarta.validation-api:jar:3.0.2:compile
[INFO] |  +- org.glassfish.jersey.ext:jersey-bean-validation:jar:3.1.2:compile
[INFO] |  |  \- org.jboss.logging:jboss-logging:jar:3.5.3.Final:compile
[INFO] |  +- org.glassfish.jersey.ext:jersey-spring6:jar:3.1.2:compile
[INFO] |  |  +- org.glassfish.jersey.inject:jersey-hk2:jar:3.1.2:compile
[INFO] |  |  |  \- org.glassfish.hk2:hk2-locator:jar:3.0.4:compile
[INFO] |  |  |     \- org.glassfish.hk2.external:aopalliance-repackaged:jar:3.0.4:compile
[INFO] |  |  +- org.glassfish.hk2:hk2:jar:3.0.4:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-utils:jar:3.0.4:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-api:jar:3.0.4:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-core:jar:3.0.4:compile
[INFO] |  |  |  +- org.glassfish.hk2:hk2-runlevel:jar:3.0.4:compile
[INFO] |  |  |  \- org.glassfish.hk2:class-model:jar:3.0.4:compile
[INFO] |  |  |     +- org.ow2.asm:asm-analysis:jar:9.5:compile
[INFO] |  |  |     +- org.ow2.asm:asm-commons:jar:9.5:compile
[INFO] |  |  |     +- org.ow2.asm:asm-tree:jar:9.5:compile
[INFO] |  |  |     \- org.ow2.asm:asm-util:jar:9.5:compile
[INFO] |  |  \- org.glassfish.hk2:spring-bridge:jar:3.0.4:compile
[INFO] |  \- org.glassfish.jersey.media:jersey-media-json-jackson:jar:3.1.2:compile
[INFO] |     +- org.glassfish.jersey.ext:jersey-entity-filtering:jar:3.1.2:compile
[INFO] |     \- com.fasterxml.jackson.module:jackson-module-jakarta-xmlbind-annotations:jar:2.15.2:compile
[INFO] +- org.springframework.boot:spring-boot-starter-test:jar:3.1.2:test
[INFO] |  +- org.springframework.boot:spring-boot-test:jar:3.1.2:test
[INFO] |  +- org.springframework.boot:spring-boot-test-autoconfigure:jar:3.1.2:test
[INFO] |  +- com.jayway.jsonpath:json-path:jar:2.8.0:test
[INFO] |  +- jakarta.xml.bind:jakarta.xml.bind-api:jar:4.0.0:compile
[INFO] |  |  \- jakarta.activation:jakarta.activation-api:jar:2.1.2:compile
[INFO] |  +- net.minidev:json-smart:jar:2.4.11:test
[INFO] |  |  \- net.minidev:accessors-smart:jar:2.4.11:test
[INFO] |  |     \- org.ow2.asm:asm:jar:9.3:test
[INFO] |  +- org.assertj:assertj-core:jar:3.24.2:test
[INFO] |  |  \- net.bytebuddy:byte-buddy:jar:1.14.5:test
[INFO] |  +- org.hamcrest:hamcrest:jar:2.2:test
[INFO] |  +- org.junit.jupiter:junit-jupiter:jar:5.9.3:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-api:jar:5.9.3:test
[INFO] |  |  |  +- org.opentest4j:opentest4j:jar:1.2.0:test
[INFO] |  |  |  +- org.junit.platform:junit-platform-commons:jar:1.9.3:test
[INFO] |  |  |  \- org.apiguardian:apiguardian-api:jar:1.1.2:test
[INFO] |  |  +- org.junit.jupiter:junit-jupiter-params:jar:5.9.3:test
[INFO] |  |  \- org.junit.jupiter:junit-jupiter-engine:jar:5.9.3:test
[INFO] |  |     \- org.junit.platform:junit-platform-engine:jar:1.9.3:test
[INFO] |  +- org.mockito:mockito-core:jar:5.3.1:test
[INFO] |  |  +- net.bytebuddy:byte-buddy-agent:jar:1.14.5:test
[INFO] |  |  \- org.objenesis:objenesis:jar:3.3:test
[INFO] |  +- org.mockito:mockito-junit-jupiter:jar:5.3.1:test
[INFO] |  +- org.skyscreamer:jsonassert:jar:1.5.1:test
[INFO] |  |  \- com.vaadin.external.google:android-json:jar:0.0.20131108.vaadin1:test
[INFO] |  +- org.springframework:spring-core:jar:6.0.11:compile
[INFO] |  |  \- org.springframework:spring-jcl:jar:6.0.11:compile
[INFO] |  \- org.xmlunit:xmlunit-core:jar:2.9.1:test
[INFO] +- org.slf4j:slf4j-api:jar:2.0.7:compile
[INFO] +- org.slf4j:jcl-over-slf4j:jar:2.0.7:compile
[INFO] +- commons-collections:commons-collections:jar:3.2.2:compile
[INFO] +- commons-codec:commons-codec:jar:1.16.0:compile
[INFO] +- org.apache.commons:commons-lang3:jar:3.7:compile
[INFO] +- commons-lang:commons-lang:jar:2.6:compile
[INFO]    +- io.github.classgraph:classgraph:jar:4.8.154:compile
[INFO]    +- org.javassist:javassist:jar:3.29.2-GA:compile
[INFO]    +- io.swagger.core.v3:swagger-models-jakarta:jar:2.2.15:compile
[INFO]    +- io.swagger.core.v3:swagger-annotations-jakarta:jar:2.2.15:compile
[INFO]    +- io.swagger.core.v3:swagger-integration-jakarta:jar:2.2.15:compile
[INFO]    |  \- io.swagger.core.v3:swagger-core-jakarta:jar:2.2.15:compile
[INFO]    |     \- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.15.2:compile
[INFO]    +- org.yaml:snakeyaml:jar:1.33:compile
[INFO]    \- com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-json-provider:jar:2.15.2:compile
[INFO]       \- com.fasterxml.jackson.jakarta.rs:jackson-jakarta-rs-base:jar:2.15.2:compile

Tried extending ResourceConfig too to define the @ApplicationPath but doesn't work. Tried also to remove swagger-jaxrs2-jakarta dependency(not sure if it is related) but it did not help. Can someone help me here please.

0 Answers0