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.