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