This is an automated email from the ASF dual-hosted git repository.

jamesnetherton pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git


The following commit(s) were added to refs/heads/main by this push:
     new 85ad04bb4d Enable interaction with CDI injected beans in non 
RouteBuilder @BindToRegistry methods
85ad04bb4d is described below

commit 85ad04bb4d89da6f4ec2c73596b7e40fd82abfd8
Author: James Netherton <[email protected]>
AuthorDate: Wed Dec 10 14:17:14 2025 +0000

    Enable interaction with CDI injected beans in non RouteBuilder 
@BindToRegistry methods
---
 .../java/org/apache/camel/quarkus/core/CamelRecorder.java  | 14 +++++++++++++-
 ...oRegistryOnCdiBean.java => BindToRegistryEchoBean.java} |  8 ++++----
 .../component/bean/bind/BindToRegistryOnCdiBean.java       | 12 ++++++++++++
 .../camel/quarkus/component/bean/BindToRegistryTest.java   |  8 ++++++++
 4 files changed, 37 insertions(+), 5 deletions(-)

diff --git 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
index da994ce9e5..f9e049e5a2 100644
--- 
a/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
+++ 
b/extensions-core/core/runtime/src/main/java/org/apache/camel/quarkus/core/CamelRecorder.java
@@ -21,6 +21,7 @@ import java.util.Set;
 import java.util.function.Supplier;
 
 import io.quarkus.arc.Arc;
+import io.quarkus.arc.InjectableInstance;
 import io.quarkus.runtime.RuntimeValue;
 import io.quarkus.runtime.annotations.Recorder;
 import org.apache.camel.CamelContext;
@@ -220,8 +221,19 @@ public class CamelRecorder {
 
     public void postProcessBeanAndBindToRegistry(RuntimeValue<CamelContext> 
camelContextRuntimeValue, Class<?> beanType) {
         try {
+            Object bean;
+
+            // To enable features like CDI injection to work with 
@BindToRegistry factory methods
+            // try to find an existing bean for the @BindToRegistry host class 
and use it for postprocessing
+            InjectableInstance<?> beanInstance = 
Arc.container().select(beanType);
+            if (beanInstance.isResolvable()) {
+                bean = beanInstance.get();
+            } else {
+                // No existing CDI bean so fallback to direct instantiation
+                bean = beanType.getDeclaredConstructor().newInstance();
+            }
+
             CamelContext camelContext = camelContextRuntimeValue.getValue();
-            Object bean = beanType.getDeclaredConstructor().newInstance();
             CamelBeanPostProcessor beanPostProcessor = 
PluginHelper.getBeanPostProcessor(camelContext);
             beanPostProcessor.postProcessBeforeInitialization(bean, 
bean.getClass().getName());
             beanPostProcessor.postProcessAfterInitialization(bean, 
bean.getClass().getName());
diff --git 
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
 
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryEchoBean.java
similarity index 84%
copy from 
integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
copy to 
integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryEchoBean.java
index c5fb502cc2..ace5938227 100644
--- 
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
+++ 
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryEchoBean.java
@@ -17,10 +17,10 @@
 package org.apache.camel.quarkus.component.bean.bind;
 
 import jakarta.enterprise.context.ApplicationScoped;
-import org.apache.camel.BindToRegistry;
 
 @ApplicationScoped
-public class BindToRegistryOnCdiBean {
-    @BindToRegistry
-    BindToRegistryBean bindToRegistryBeanCdiTest = new BindToRegistryBean();
+public class BindToRegistryEchoBean {
+    public String echo(String message) {
+        return message;
+    }
 }
diff --git 
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
 
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
index c5fb502cc2..2da5385733 100644
--- 
a/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
+++ 
b/integration-test-groups/foundation/bean/src/main/java/org/apache/camel/quarkus/component/bean/bind/BindToRegistryOnCdiBean.java
@@ -16,11 +16,23 @@
  */
 package org.apache.camel.quarkus.component.bean.bind;
 
+import io.quarkus.arc.Unremovable;
 import jakarta.enterprise.context.ApplicationScoped;
+import jakarta.inject.Inject;
 import org.apache.camel.BindToRegistry;
 
+@Unremovable
 @ApplicationScoped
 public class BindToRegistryOnCdiBean {
+    @Inject
+    BindToRegistryEchoBean echoBean;
+
     @BindToRegistry
     BindToRegistryBean bindToRegistryBeanCdiTest = new BindToRegistryBean();
+
+    @BindToRegistry
+    public BindToRegistryBean nonRouteBuilderBeanWithInjection() {
+        String message = echoBean != null ? 
echoBean.echo("BindToRegistryEchoBean") : "Unknown";
+        return new BindToRegistryBean(message);
+    }
 }
diff --git 
a/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BindToRegistryTest.java
 
b/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BindToRegistryTest.java
index af12ca7a76..ab383f2b70 100644
--- 
a/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BindToRegistryTest.java
+++ 
b/integration-test-groups/foundation/bean/src/test/java/org/apache/camel/quarkus/component/bean/BindToRegistryTest.java
@@ -60,4 +60,12 @@ class BindToRegistryTest {
                 .then()
                 .body(equalTo("BindToRegistryProcessor instantiation count: 
1"));
     }
+
+    @Test
+    void bindToRegistryNonRouteBuilderBeanWithInjection() {
+        RestAssured.given()
+                
.get("/bean/route/invokeBindToRegistryBean/nonRouteBuilderBeanWithInjection")
+                .then()
+                .body(equalTo("Hello BindToRegistryEchoBean"));
+    }
 }

Reply via email to