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 <[email protected]> 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); } } }
