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