You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/10/13 14:59:55 UTC

[camel] 01/01: CAMEL-19967: Fix RouteBuilder/RouteConfigurationBuilder to ensure CamelContext is inject eager. This fixes a problem with using global route configurations in Java and XML DSLs mixed.

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

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

commit 8e0b3195ebe25986ab9eafe5eb2b648ab2868459
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Oct 13 16:59:40 2023 +0200

    CAMEL-19967: Fix RouteBuilder/RouteConfigurationBuilder to ensure CamelContext is inject eager. This fixes a problem with using global route configurations in Java and XML DSLs mixed.
---
 .../java/org/apache/camel/builder/RouteBuilder.java | 21 ++++++++++++++++-----
 .../camel/builder/RouteConfigurationBuilder.java    |  6 ++++++
 2 files changed, 22 insertions(+), 5 deletions(-)

diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
index 0c72cba8f95..d3a032bc011 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteBuilder.java
@@ -714,14 +714,11 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
 
     // Implementation methods
     // -----------------------------------------------------------------------
+
     protected void checkInitialized() throws Exception {
         if (initialized.compareAndSet(false, true)) {
-            // Set the CamelContext ErrorHandler here
             CamelContext camelContext = getContext();
-            if (camelContext.getCamelContextExtension().getErrorHandlerFactory() != null) {
-                setErrorHandlerFactory(
-                        camelContext.getCamelContextExtension().getErrorHandlerFactory());
-            }
+            initializeCamelContext(camelContext);
 
             List<RouteBuilderLifecycleStrategy> strategies = new ArrayList<>(lifecycleInterceptors);
             strategies.addAll(camelContext.getRegistry().findByType(RouteBuilderLifecycleStrategy.class));
@@ -737,6 +734,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
             getRouteCollection().setResource(getResource());
             getRestCollection().setResource(getResource());
             getRouteTemplateCollection().setResource(getResource());
+            getTemplatedRouteCollection().setResource(getResource());
             for (RegistryBeanDefinition def : beans) {
                 def.setResource(getResource());
             }
@@ -752,6 +750,19 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
         }
     }
 
+    protected void initializeCamelContext(CamelContext camelContext) {
+        // Set the CamelContext ErrorHandler here
+        if (camelContext.getCamelContextExtension().getErrorHandlerFactory() != null) {
+            setErrorHandlerFactory(
+                    camelContext.getCamelContextExtension().getErrorHandlerFactory());
+        }
+        // inject camel context on collections
+        getRouteCollection().setCamelContext(camelContext);
+        getRestCollection().setCamelContext(camelContext);
+        getRouteTemplateCollection().setCamelContext(camelContext);
+        getTemplatedRouteCollection().setCamelContext(camelContext);
+    }
+
     protected void populateTemplatedRoutes() throws Exception {
         populateTemplatedRoutes(notNullCamelContext());
     }
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteConfigurationBuilder.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteConfigurationBuilder.java
index 75a0de88b31..61e2f59daee 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteConfigurationBuilder.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/RouteConfigurationBuilder.java
@@ -97,6 +97,12 @@ public abstract class RouteConfigurationBuilder extends RouteBuilder implements
         }
     }
 
+    @Override
+    protected void initializeCamelContext(CamelContext camelContext) {
+        super.initializeCamelContext(camelContext);
+        getRouteConfigurationCollection().setCamelContext(camelContext);
+    }
+
     protected void populateRoutesConfiguration() throws Exception {
         CamelContext camelContext = getContext();
         if (camelContext == null) {