use of io.quarkus.smallrye.openapi.deployment.spi.AddToOpenAPIDefinitionBuildItem in project camel-quarkus by apache.
the class CamelRestOASFilter method exposeOpenAPI.
@BuildStep(onlyIf = ExposeOpenApiEnabled.class)
void exposeOpenAPI(List<CamelRoutesBuilderClassBuildItem> routesBuilderClasses, BuildProducer<AddToOpenAPIDefinitionBuildItem> openAPI, Capabilities capabilities) throws Exception {
if (capabilities.isPresent(Capability.SMALLRYE_OPENAPI)) {
RoutesConfigurer configurer = new RoutesConfigurer();
List<RoutesBuilder> routes = new ArrayList<>();
configurer.setRoutesBuilders(routes);
configurer.setRoutesCollector(new DefaultRoutesCollector());
configurer.setRoutesIncludePattern(CamelSupport.getOptionalConfigValue("camel.main.routes-include-pattern", String.class, null));
configurer.setRoutesExcludePattern(CamelSupport.getOptionalConfigValue("camel.main.routes-exclude-pattern", String.class, null));
final CamelContext ctx = new DefaultCamelContext();
if (!routesBuilderClasses.isEmpty()) {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (!(loader instanceof QuarkusClassLoader)) {
throw new IllegalStateException(QuarkusClassLoader.class.getSimpleName() + " expected as the context class loader");
}
for (CamelRoutesBuilderClassBuildItem routesBuilderClass : routesBuilderClasses) {
final String className = routesBuilderClass.getDotName().toString();
final Class<?> cl = loader.loadClass(className);
if (RouteBuilder.class.isAssignableFrom(cl)) {
try {
final RouteBuilder rb = (RouteBuilder) cl.getDeclaredConstructor().newInstance();
routes.add(rb);
} catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException("Could not instantiate " + className, e);
}
}
}
}
try {
configurer.configureRoutes(ctx);
} catch (Exception e) {
// ignore
LOGGER.warn("config routes failed with " + e);
}
openAPI.produce(new AddToOpenAPIDefinitionBuildItem(new CamelRestOASFilter(ctx)));
}
}
Aggregations