in extensions-core/core/deployment/src/main/java/org/apache/camel/quarkus/core/deployment/InjectionPointsProcessor.java [315:378]
void produceBeans(CamelRecorder recorder, List<CapabilityBuildItem> capabilities,
BuildProducer<SyntheticBeanBuildItem> syntheticBeans,
BuildProducer<NativeImageProxyDefinitionBuildItem> proxyDefinitions,
AtomicReference<Boolean> beanCapabilityAvailable,
IndexView index,
AnnotationInstance annot, final DotName fieldType, String annotationTarget, DotName declaringClass) {
try {
Class<?> clazz = Class.forName(fieldType.toString(), false,
Thread.currentThread().getContextClassLoader());
if (ProducerTemplate.class.isAssignableFrom(clazz)) {
syntheticBeans.produce(
SyntheticBeanBuildItem
.configure(fieldType)
.setRuntimeInit().scope(Singleton.class)
.supplier(
recorder.createProducerTemplate(resolveAnnotValue(index, annot)))
.addQualifier(annot)
.done());
/*
* Note that ProducerTemplate injection points not having @EndpointInject are produced via
* CamelProducers.camelProducerTemplate()
*/
} else if (FluentProducerTemplate.class.isAssignableFrom(clazz)) {
syntheticBeans.produce(
SyntheticBeanBuildItem
.configure(fieldType)
.setRuntimeInit().scope(Singleton.class)
.supplier(
recorder.createFluentProducerTemplate(resolveAnnotValue(index, annot)))
.addQualifier(annot)
.done());
/*
* Note that FluentProducerTemplate injection points not having @EndpointInject are produced via
* CamelProducers.camelFluentProducerTemplate()
*/
} else if (clazz.isInterface()) {
/* Requires camel-quarkus-bean */
if (beanCapabilityAvailable.get() == null) {
beanCapabilityAvailable.set(capabilities.stream().map(CapabilityBuildItem::getName)
.anyMatch(feature -> CamelCapabilities.BEAN.equals(feature)));
}
if (!beanCapabilityAvailable.get()) {
throw new IllegalStateException(
"Add camel-quarkus-bean dependency to be able to use @org.apache.camel.Produce on fields with interface type: "
+ fieldType.toString()
+ " " + annotationTarget + " in "
+ declaringClass.toString());
}
proxyDefinitions.produce(new NativeImageProxyDefinitionBuildItem(fieldType.toString()));
syntheticBeans.produce(
SyntheticBeanBuildItem
.configure(fieldType)
.setRuntimeInit().scope(Singleton.class)
.supplier(
recorder.produceProxy(clazz, resolveAnnotValue(index, annot)))
.addQualifier(annot)
.done());
}
} catch (ClassNotFoundException e) {
throw new RuntimeException(e);
}
}