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

davsclaus pushed a commit to branch fac-bean
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/fac-bean by this push:
     new 6da61ceae18 CAMEL-19912: camel-core-model - Add factory-bean parameter
6da61ceae18 is described below

commit 6da61ceae18003c9ca2a01e0037ad819a3a8c664
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Tue Sep 26 13:07:16 2023 +0200

    CAMEL-19912: camel-core-model - Add factory-bean parameter
---
 .../java/org/apache/camel/spring/spi/SpringInjector.java    | 13 ++++++++++---
 .../src/main/java/org/apache/camel/spi/Injector.java        |  2 +-
 .../modules/ROOT/pages/camel-4x-upgrade-guide-4_1.adoc      |  5 +++++
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git 
a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringInjector.java
 
b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringInjector.java
index dc315ca6f2d..bd3c1626e70 100644
--- 
a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringInjector.java
+++ 
b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringInjector.java
@@ -43,16 +43,23 @@ public class SpringInjector implements Injector {
 
     @Override
     public <T> T newInstance(Class<T> type, String factoryMethod) {
+        return newInstance(type, null, factoryMethod);
+    }
+
+    @Override
+    public <T> T newInstance(Class<T> type, Class<?> factoryClass, String 
factoryMethod) {
+        Class<?> target = factoryClass != null ? factoryClass : type;
         T answer = null;
         try {
             // lookup factory method
-            Method fm = type.getMethod(factoryMethod);
-            if (Modifier.isStatic(fm.getModifiers()) && 
Modifier.isPublic(fm.getModifiers()) && fm.getReturnType() == type) {
+            Method fm = target.getMethod(factoryMethod);
+            if (Modifier.isStatic(fm.getModifiers()) && 
Modifier.isPublic(fm.getModifiers())
+                    && fm.getReturnType() != Void.class) {
                 Object obj = fm.invoke(null);
                 answer = type.cast(obj);
             }
         } catch (Exception e) {
-            throw new RuntimeCamelException("Error invoking factory method: " 
+ factoryMethod + " on class: " + type, e);
+            throw new RuntimeCamelException("Error invoking factory method: " 
+ factoryMethod + " on class: " + target, e);
         }
         return answer;
     }
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Injector.java 
b/core/camel-api/src/main/java/org/apache/camel/spi/Injector.java
index 69df0a6959b..636090a4ccf 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Injector.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Injector.java
@@ -18,7 +18,7 @@ package org.apache.camel.spi;
 
 /**
  * A pluggable strategy for creating and possibly dependency injecting objects 
which could be implemented using straight
- * forward reflection or using Spring or CDI to perform dependency injection.
+ * forward reflection or using Spring or Quarkus to perform dependency 
injection.
  */
 public interface Injector {
 
diff --git 
a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_1.adoc 
b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_1.adoc
index 246b3e864f8..59060d1ec75 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_1.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-4x-upgrade-guide-4_1.adoc
@@ -6,6 +6,11 @@ from both 4.0 to 4.1 and 4.1 to 4.2.
 
 == Upgrading Camel 4.0 to 4.1
 
+=== camel-api
+
+Add method `newInstance(Class<T> type, Class<?> factoryClass, String 
factoryMethod)`
+to `org.apache.camel.spi.Injector`.
+
 === camel-management
 
 Dumping routes to JMX no longer includes `customId="true"` in the XML nodes.

Reply via email to