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 2025/01/27 10:13:04 UTC
(camel) 08/13: CAMEL-21599: camel-kamelet - Rework error handler for kamelets to be more standard Camel. WIP
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch kamelet2
in repository https://gitbox.apache.org/repos/asf/camel.git
commit af0549046d006328e6008777b774c8ec11ec942e
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Jan 27 09:33:31 2025 +0100
CAMEL-21599: camel-kamelet - Rework error handler for kamelets to be more standard Camel. WIP
---
.../apache/camel/component/kamelet/Kamelet.java | 21 ++++----
.../org/apache/camel/reifier/ProcessorReifier.java | 58 ++++++++++++----------
2 files changed, 43 insertions(+), 36 deletions(-)
diff --git a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
index 0dec0f1e009..5e7c905ad4c 100644
--- a/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
+++ b/components/camel-kamelet/src/main/java/org/apache/camel/component/kamelet/Kamelet.java
@@ -202,18 +202,21 @@ public final class Kamelet {
def.setNodePrefixId(uuid);
if (noErrorHandler) {
def.setErrorHandlerFactory(new NoErrorHandlerBuilder());
- } else if (prid != null && ppid != null) {
+ } else if (prid != null) {
ModelCamelContext mcc = (ModelCamelContext) in.getCamelContext();
+ RouteDefinition parent = mcc.getRouteDefinition(prid);
+ boolean wrap = true;
+
// the kamelet are used from a processor, and we need to check if this processor
// has any error handler or not (if not then we should also not use error handler in the kamelet)
- ProcessorDefinition<?> pro = mcc.getProcessorDefinition(ppid);
- boolean wrap = pro == null || ProcessorDefinitionHelper.shouldWrapInErrorHandler(def.getCamelContext(), pro, null,
- pro.getInheritErrorHandler());
- if (wrap) {
- RouteDefinition parent = mcc.getRouteDefinition(prid);
- if (parent != null) {
- def.setErrorHandlerFactory(parent.getErrorHandlerFactory().cloneBuilder());
- }
+ // (if ppid is null then it is a source kamelet)
+ if (ppid != null) {
+ ProcessorDefinition<?> pro = mcc.getProcessorDefinition(ppid);
+ wrap = pro == null || ProcessorDefinitionHelper.shouldWrapInErrorHandler(def.getCamelContext(), pro, null,
+ pro.getInheritErrorHandler());
+ }
+ if (wrap && parent != null) {
+ def.setErrorHandlerFactory(parent.getErrorHandlerFactory().cloneBuilder());
} else {
def.setErrorHandlerFactory(new NoErrorHandlerBuilder());
}
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 292c3ba7309..b30fe7c4194 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -829,38 +829,42 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
* Creates the processor and wraps it in any necessary interceptors and error handlers
*/
protected Channel makeProcessor() throws Exception {
- // TODO: capture processor id
-
- Processor processor = null;
+ String outputId = definition.idOrCreate(camelContext.getCamelContextExtension().getContextPlugin(NodeIdFactory.class));
+ camelContext.getCamelContextExtension().createProcessor(outputId);
+ try {
+ Processor processor = null;
- // allow any custom logic before we create the processor
- preCreateProcessor();
+ // allow any custom logic before we create the processor
+ preCreateProcessor();
- // at first use custom factory
- final ProcessorFactory processorFactory = PluginHelper.getProcessorFactory(camelContext);
- if (processorFactory != null) {
- processor = processorFactory.createProcessor(route, definition);
- }
- // fallback to default implementation if factory did not create the
- // processor
- if (processor == null) {
- processor = createProcessor();
- }
+ // at first use custom factory
+ final ProcessorFactory processorFactory = PluginHelper.getProcessorFactory(camelContext);
+ if (processorFactory != null) {
+ processor = processorFactory.createProcessor(route, definition);
+ }
+ // fallback to default implementation if factory did not create the
+ // processor
+ if (processor == null) {
+ processor = createProcessor();
+ }
- // inject id
- if (processor instanceof IdAware idAware) {
- String id = getId(definition);
- idAware.setId(id);
- }
- if (processor instanceof RouteIdAware routeIdAware) {
- routeIdAware.setRouteId(route.getRouteId());
- }
+ // inject id
+ if (processor instanceof IdAware idAware) {
+ String id = getId(definition);
+ idAware.setId(id);
+ }
+ if (processor instanceof RouteIdAware routeIdAware) {
+ routeIdAware.setRouteId(route.getRouteId());
+ }
- if (processor == null) {
- // no processor to make
- return null;
+ if (processor == null) {
+ // no processor to make
+ return null;
+ }
+ return wrapProcessor(processor);
+ } finally {
+ camelContext.getCamelContextExtension().createProcessor(null);
}
- return wrapProcessor(processor);
}
/**