This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch fix/CAMEL-24104 in repository https://gitbox.apache.org/repos/asf/camel.git
commit 0943391491b78822e391cc6c8151d059babf46a0 Author: Claus Ibsen <[email protected]> AuthorDate: Thu Jul 16 10:01:42 2026 +0200 CAMEL-24104: camel-bean - Fix racy Processor-adapter lookup in AbstractBeanProcessor Co-Authored-By: Claude Opus 4.6 <[email protected]> Signed-off-by: Claus Ibsen <[email protected]> --- .../camel/component/bean/AbstractBeanProcessor.java | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java index 429276340ca5..92412328f379 100644 --- a/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java +++ b/components/camel-bean/src/main/java/org/apache/camel/component/bean/AbstractBeanProcessor.java @@ -37,9 +37,9 @@ public abstract class AbstractBeanProcessor extends AsyncProcessorSupport { private static final Logger LOG = LoggerFactory.getLogger(AbstractBeanProcessor.class); private final BeanHolder beanHolder; - private transient Processor processor; + private transient volatile Processor processor; private transient Object bean; - private transient boolean lookupProcessorDone; + private transient volatile boolean lookupProcessorDone; private final Lock lock = new ReentrantLock(); private BeanScope scope; private String method; @@ -130,10 +130,15 @@ public abstract class AbstractBeanProcessor extends AsyncProcessorSupport { if (!lookupProcessorDone) { lock.lock(); try { - lookupProcessorDone = true; - // so if there is a custom type converter for the bean to processor - target = exchange.getContext().getTypeConverter().tryConvertTo(Processor.class, exchange, beanTmp); - processor = target; + if (!lookupProcessorDone) { + // so if there is a custom type converter for the bean to processor + target = exchange.getContext().getTypeConverter().tryConvertTo(Processor.class, exchange, + beanTmp); + processor = target; + lookupProcessorDone = true; + } else { + target = processor; + } } finally { lock.unlock(); }
