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);
}
}
}