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
