Claus Ibsen created CAMEL-26411:
-----------------------------------

             Summary: camel-jbang - AI tools: camel_eval_expression evaluates a 
JSON body as parsed data, and its answers name a missing body or an unset header
                 Key: CAMEL-26411
                 URL: https://issues.apache.org/jira/browse/CAMEL-26411
             Project: Camel
          Issue Type: Improvement
          Components: camel-jbang, camel-jbang-mcp
            Reporter: Claus Ibsen
             Fix For: 4.24.0


A follow-up to CAMEL-26400, from the local-model benchmark (qwen3.6:35b on 
Ollama, run r24 on Oct 29-30 2026).

The model used camel_eval_expression more than before: 63 calls, against 24 in 
the run before. No step of the series failed because of CAMEL-26400. But some 
answers sent the model the wrong way:

* *A JSON body is text.* With the JSON passed as body, 
{{$\{body[lines].size()\}}} fails with "the body is text (a String): unmarshal 
it first (unmarshal: json) to read its fields". That is right for a route, but 
the model cannot unmarshal inside the tool, so it cannot test the expression 
the way the route will see the body after unmarshal: json. In 
route-filter-and-multicast step 2, it sent the same call 10 times in a row.
* *body.lines on text.* {{$\{body.lines.size()\}}} on a JSON text body calls 
String.lines(), and the answer is "Method with name: size() not found on bean: 
java.util.stream.ReferencePipeline$Head".
* *jsonpath with no body.* The answer is "java.lang.IllegalArgumentException: 
json string can not be null or empty" (3 calls). It does not say that the JSON 
goes in body.
* *No body is empty text, not null.* {{$\{body} == null}} answers false, also 
with "body": null. A route before any step has a null body.
* *An unset Camel header.* {{$\{header.CamelRedeliveryCounter\}}} gives 
nullResult with the note "a header, property or variable that is not set". The 
model then tried {{$\{exchangeProperty.CamelRedeliveryCounter\}}}, which is 
also null. The note could say that the header is not set in the test exchange, 
and that the headers argument sets it.

Proposal:
* A way to evaluate against a JSON body as parsed data (a Map or a List, as 
after unmarshal: json), for example when the expression reads fields of a body 
that is JSON text. The answer says that it did so.
* Name the missing body for jsonpath (and the other languages that need one).
* Evaluate with a null body when no body is given, or say in the note that the 
body is empty text.
* For an unset header, point to the headers argument.
* Note an identical repeated call ("same call as before, same answer").



--
This message was sent by Atlassian Jira
(v10.3.26#10030026)

Reply via email to