in extensions-support/language/deployment/src/main/java/org/apache/camel/quarkus/support/language/deployment/LanguageSupportProcessor.java [39:102]
ExpressionExtractionResultBuildItem extractExpressions(CamelConfig config,
List<CamelRoutesBuilderClassBuildItem> routesBuilderClasses,
BuildProducer<ExpressionBuildItem> expressions,
BuildProducer<ScriptBuildItem> scripts) throws Exception {
CamelConfig.ExpressionConfig expression = config.expression();
if (expression.extractionEnabled()) {
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
if (!(loader instanceof QuarkusClassLoader)) {
throw new IllegalStateException(
QuarkusClassLoader.class.getSimpleName() + " expected as the context class loader");
}
final List<Class<?>> routeBuilderClasses = new ArrayList<>(routesBuilderClasses.size());
for (CamelRoutesBuilderClassBuildItem routesBuilderClass : routesBuilderClasses) {
final String className = routesBuilderClass.getDotName().toString();
final Class<?> cl = loader.loadClass(className);
if (RouteBuilder.class.isAssignableFrom(cl)) {
routeBuilderClasses.add(cl);
} else {
LOG.warnf("Language expressions occurring in %s won't be compiled at build time", cl);
}
}
try {
DryModeMain main = new DryModeMain("Expression Extractor", routeBuilderClasses.toArray(new Class<?>[0]));
main.start();
main.run();
for (DryModeLanguage language : main.getLanguages()) {
final String name = language.getName();
for (ExpressionHolder holder : language.getPredicates()) {
expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
holder.getProperties(), true));
}
for (ExpressionHolder holder : language.getExpressions()) {
expressions.produce(new ExpressionBuildItem(name, holder.getContent(), holder.getLoadedContent(),
holder.getProperties(), false));
}
for (ScriptHolder script : language.getScripts()) {
scripts.produce(
new ScriptBuildItem(name, script.getContent(), script.getLoadedContent(),
script.getBindings()));
}
}
return new ExpressionExtractionResultBuildItem(true);
} catch (Exception e) {
switch (expression.onBuildTimeAnalysisFailure()) {
case fail:
throw new RuntimeException(
"Could not extract language expressions."
+ "You may want to set quarkus.camel.expression.on-build-time-analysis-failure to warn or ignore if you do not use languages in your routes",
e);
case warn:
LOG.warn("Could not extract language expressions.", e);
break;
case ignore:
LOG.debug("Could not extract language expressions", e);
break;
default:
throw new IllegalStateException("Unexpected " + CamelConfig.FailureRemedy.class.getSimpleName() + ": "
+ expression.onBuildTimeAnalysisFailure());
}
}
}
return new ExpressionExtractionResultBuildItem(false);
}