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

Reply via email to