Мы решили с помощью обходного пути: изменив javax.ws.rs.core.Application
, чтобы загрузить только те конечные точки, которые мы предоставляем своими собственными, игнорируя любую другую конечную точку 3rdParty, такую как swagger-jaxrs2 openapi
или openapi.{type:json|yaml}
@ApplicationPath("")
public class OurApplication extends javax.ws.rs.core.Application {
@Override
public Set<Class<?>> getClasses() {
// Start detecting only classes in your package! provided 3rdParty packages
// (like io.swagger.v3.jaxrs2.integration.resources) won't be provided
Reflections ourClasses = new Reflections("our.package.naming");
// Scan your classed for @javax.ws.rs.Path Annotaion. We need just collect
// API-Endpoints
Set<Class<?>> ourEndpoints = ourClasses.getTypesAnnotatedWith(Path.class);
// fyi - log the registered classes / endpoints
System.out.println("Providing "+ ourEndpoints);
// return endpoints to provide it in your application
return ourEndpoints;
}
}
СОВЕТ: Из-за аннотации @ApplicationPath нет необходимости изменять веб. xml.
Используемые нами отражения предоставляются maven:
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.9.12</version>
</dependency>
Часы https://github.com/ronmamo/reflections для получения дополнительной информации о пакете отражений.
Мы не нашли лучшего решения, но это то, что сработало для нас. Наслаждайся этим.