This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch backport/28486-to-camel-4.22.x
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 6103804a7c5802134b7d6012754a492c593f6cf7
Author: Guillaume Nodet <[email protected]>
AuthorDate: Mon Oct 26 11:38:02 2026 +0000

    [backport camel-4.22.x] CAMEL-26301: tokenizer EIP: wrap tokenizer call to 
prevent exchange hang on exception
---
 .../langchain4j/tokenizer/AbstractLangChain4JTokenizer.java  |  5 +++++
 .../java/org/apache/camel/processor/TokenizerProcessor.java  | 12 ++++++++----
 2 files changed, 13 insertions(+), 4 deletions(-)

diff --git 
a/components/camel-ai/camel-langchain4j-tokenizer/src/main/java/org/apache/camel/component/langchain4j/tokenizer/AbstractLangChain4JTokenizer.java
 
b/components/camel-ai/camel-langchain4j-tokenizer/src/main/java/org/apache/camel/component/langchain4j/tokenizer/AbstractLangChain4JTokenizer.java
index 6cadffa749b4..9a87ef5ebe17 100644
--- 
a/components/camel-ai/camel-langchain4j-tokenizer/src/main/java/org/apache/camel/component/langchain4j/tokenizer/AbstractLangChain4JTokenizer.java
+++ 
b/components/camel-ai/camel-langchain4j-tokenizer/src/main/java/org/apache/camel/component/langchain4j/tokenizer/AbstractLangChain4JTokenizer.java
@@ -19,6 +19,7 @@ package org.apache.camel.component.langchain4j.tokenizer;
 
 import dev.langchain4j.data.document.DocumentSplitter;
 import org.apache.camel.Exchange;
+import org.apache.camel.RuntimeCamelException;
 import 
org.apache.camel.component.langchain4j.tokenizer.config.LangChain4JConfiguration;
 import org.apache.camel.component.langchain4j.tokenizer.util.SplitterUtil;
 import org.apache.camel.spi.Tokenizer;
@@ -46,6 +47,10 @@ abstract class AbstractLangChain4JTokenizer<T extends 
LangChain4JConfiguration>
     public final String[] tokenize(Exchange exchange) {
         final String body = exchange.getIn().getBody(String.class);
 
+        if (body == null) {
+            throw new RuntimeCamelException("Cannot tokenize a null body");
+        }
+
         LOG.debug("Starting LangChain4j tokenizer for message: {}", body);
 
         final String[] split = SplitterUtil.split(splitter, body);
diff --git 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/TokenizerProcessor.java
 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/TokenizerProcessor.java
index b794fa0bd72d..d6697d0c5d0f 100644
--- 
a/core/camel-core-processor/src/main/java/org/apache/camel/processor/TokenizerProcessor.java
+++ 
b/core/camel-core-processor/src/main/java/org/apache/camel/processor/TokenizerProcessor.java
@@ -53,11 +53,15 @@ public class TokenizerProcessor extends BaseProcessorSupport
 
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
-        final String[] tokenized = tokenizer.tokenize(exchange);
-
-        exchange.getMessage().setBody(tokenized);
+        try {
+            final String[] tokenized = tokenizer.tokenize(exchange);
+            exchange.getMessage().setBody(tokenized);
+        } catch (Exception e) {
+            exchange.setException(e);
+            callback.done(true);
+            return true;
+        }
         return processor.process(exchange, callback);
-
     }
 
     @Override

Reply via email to