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 2021/07/07 08:44:15 UTC

[camel] 01/02: CAMEL-16757: camel-core - Global error handling, interceptor in all DSL

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

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

commit 4dde6d8783f78397236e549ae4d0fbeb7dba7ecb
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Wed Jul 7 10:37:45 2021 +0200

    CAMEL-16757: camel-core - Global error handling, interceptor in all DSL
---
 .../java/org/apache/camel/CamelContextAware.java   |  2 +-
 .../org/apache/camel/builder/BuilderSupport.java   | 33 ++++++++++++++++++----
 .../org/apache/camel/builder/RouteBuilder.java     |  4 +--
 .../dsl/support/RouteBuilderLoaderSupport.java     |  2 ++
 .../camel/dsl/xml/io/XmlRoutesBuilderLoader.java   | 12 ++++----
 .../dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java   | 13 ++++-----
 6 files changed, 43 insertions(+), 23 deletions(-)

diff --git a/core/camel-api/src/main/java/org/apache/camel/CamelContextAware.java b/core/camel-api/src/main/java/org/apache/camel/CamelContextAware.java
index ee565ff..4188fa6 100644
--- a/core/camel-api/src/main/java/org/apache/camel/CamelContextAware.java
+++ b/core/camel-api/src/main/java/org/apache/camel/CamelContextAware.java
@@ -25,7 +25,7 @@ public interface CamelContextAware {
      * Set the {@link CamelContext} context if the object is an instance of {@link CamelContextAware}.
      */
     static <T> T trySetCamelContext(T object, CamelContext camelContext) {
-        if (object instanceof CamelContextAware) {
+        if (camelContext != null && object instanceof CamelContextAware) {
             ((CamelContextAware) object).setCamelContext(camelContext);
         }
 
diff --git a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java
index 2b2bcfc..8aa028e 100644
--- a/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java
+++ b/core/camel-core-model/src/main/java/org/apache/camel/builder/BuilderSupport.java
@@ -21,6 +21,7 @@ import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
 import org.apache.camel.NoSuchEndpointException;
@@ -36,15 +37,15 @@ import org.apache.camel.util.ObjectHelper;
  * Base class for implementation inheritance for different clauses in the
  * <a href="http://camel.apache.org/dsl.html">Java DSL</a>
  */
-public abstract class BuilderSupport {
-    private CamelContext context;
+public abstract class BuilderSupport implements CamelContextAware {
+    private CamelContext camelContext;
     private ErrorHandlerBuilder errorHandlerBuilder;
 
     protected BuilderSupport() {
     }
 
     protected BuilderSupport(CamelContext context) {
-        this.context = context;
+        this.camelContext = context;
     }
 
     // Builder methods
@@ -451,13 +452,33 @@ public abstract class BuilderSupport {
     // Properties
     // -------------------------------------------------------------------------
 
+    @Override
+    public CamelContext getCamelContext() {
+        return camelContext;
+    }
+
+    @Override
+    public void setCamelContext(CamelContext camelContext) {
+        if (camelContext != null) {
+            this.camelContext = camelContext;
+        }
+    }
+
+    /**
+     * Get the {@link CamelContext}
+     *
+     * @return camelContext the Camel context
+     */
     public CamelContext getContext() {
-        return context;
+        return getCamelContext();
     }
 
+    /**
+     * @deprecated use {@link #setCamelContext(CamelContext)}
+     */
+    @Deprecated
     public void setContext(CamelContext context) {
-        ObjectHelper.notNull(context, "CamelContext", this);
-        this.context = context;
+        setCamelContext(context);
     }
 
     public boolean hasErrorHandlerBuilder() {
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 b04ad8a..622b225 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
@@ -497,7 +497,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
      * @throws Exception can be thrown during configuration
      */
     public RoutesDefinition configureRoutes(CamelContext context) throws Exception {
-        setContext(context);
+        setCamelContext(context);
         checkInitialized();
         routeCollection.setCamelContext(context);
         return routeCollection;
@@ -511,7 +511,7 @@ public abstract class RouteBuilder extends BuilderSupport implements RoutesBuild
      * @throws Exception can be thrown during configuration
      */
     public RestsDefinition configureRests(CamelContext context) throws Exception {
-        setContext(context);
+        setCamelContext(context);
         restCollection.setCamelContext(context);
         return restCollection;
     }
diff --git a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
index 021d007..b0b846e 100644
--- a/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
+++ b/dsl/camel-dsl-support/src/main/java/org/apache/camel/dsl/support/RouteBuilderLoaderSupport.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.dsl.support;
 
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.StartupStep;
@@ -57,6 +58,7 @@ public abstract class RouteBuilderLoaderSupport extends RoutesBuilderLoaderSuppo
     @Override
     public RoutesBuilder loadRoutesBuilder(Resource resource) throws Exception {
         final RouteBuilder builder = doLoadRouteBuilder(resource);
+        CamelContextAware.trySetCamelContext(builder, getCamelContext());
 
         if (recorder != null) {
             StartupStep step = recorder.beginStep(
diff --git a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
index 816b71a..59abcfd 100644
--- a/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-io-dsl/src/main/java/org/apache/camel/dsl/xml/io/XmlRoutesBuilderLoader.java
@@ -18,11 +18,11 @@ package org.apache.camel.dsl.xml.io;
 
 import java.io.InputStream;
 
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dsl.support.RouteBuilderLoaderSupport;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.RoutesLoader;
@@ -77,13 +77,13 @@ public class XmlRoutesBuilderLoader extends RouteBuilderLoaderSupport {
             }
 
             private void addRoutes(RoutesDefinition routes) {
-                // xml routes must be marked as un-prepared as camel-core
-                // must do special handling for XML DSL
+                CamelContextAware.trySetCamelContext(getRouteCollection(), getCamelContext());
+
+                // xml routes must be prepared in the same way java-dsl (via RoutesDefinition)
+                // so create a copy and use the fluent builder to add the route
                 for (RouteDefinition route : routes.getRoutes()) {
-                    RouteDefinitionHelper.prepareRoute(getCamelContext(), route);
-                    route.markPrepared();
+                    getRouteCollection().route(route);
                 }
-                setRouteCollection(routes);
             }
         };
     }
diff --git a/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java b/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
index c07a26b..024ac43 100644
--- a/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
+++ b/dsl/camel-xml-jaxb-dsl/src/main/java/org/apache/camel/dsl/xml/jaxb/JaxbXmlRoutesBuilderLoader.java
@@ -18,11 +18,11 @@ package org.apache.camel.dsl.xml.jaxb;
 
 import java.io.InputStream;
 
+import org.apache.camel.CamelContextAware;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.dsl.support.RouteBuilderLoaderSupport;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.model.RouteDefinitionHelper;
 import org.apache.camel.model.RouteTemplatesDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
@@ -65,15 +65,12 @@ public class JaxbXmlRoutesBuilderLoader extends RouteBuilderLoaderSupport {
                 try (InputStream is = resource.getInputStream()) {
                     RoutesDefinition routes = loadRoutesDefinition(getCamelContext(), is);
                     if (routes != null) {
-                        // xml routes must be marked as un-prepared as camel-core
-                        // must do special handling for XML DSL
+                        CamelContextAware.trySetCamelContext(getRouteCollection(), getCamelContext());
+                        // xml routes must be prepared in the same way java-dsl (via RoutesDefinition)
+                        // so create a copy and use the fluent builder to add the route
                         for (RouteDefinition route : routes.getRoutes()) {
-                            RouteDefinitionHelper.prepareRoute(getCamelContext(), route);
-                            route.markPrepared();
+                            getRouteCollection().route(route);
                         }
-
-                        routes.getRoutes().forEach(RouteDefinition::markUnprepared);
-                        setRouteCollection(routes);
                     }
                 }
             }