Claus Ibsen created CAMEL-26386:
-----------------------------------
Summary: camel-yaml-dsl-validator - Body type checks: a field read
on the List of a JSON array file, a field read after a marshal of an unknown
body, a variableSend of a header, and a setBody that emptied the body
Key: CAMEL-26386
URL: https://issues.apache.org/jira/browse/CAMEL-26386
Project: Camel
Issue Type: Improvement
Components: camel-yaml-dsl, camel-jbang, camel-core
Reporter: Claus Ibsen
Fix For: 4.24.0
Four findings from the local-model benchmark (qwen3.6, r23), after the body
type checks of CAMEL-25928.
*A field read on the List of a JSON array file* (rest-code-first step 1, 0 of 7
runs in r22 and r23)
After setBody resource:file:orders.json and unmarshal: json, the model read
${body.orderId} in a choice. orders.json is a JSON array, so the body is a
List, and the runtime hint ("a List has no method or key orderId ... use
jsonpath") came only after the first reload. 4 runs then ended with the right
route, but the errors of the first version were counted. The AI tools now read
which JSON files of the project a resource: of the routes loads are arrays
(ProjectFacts.jsonArrays), and the validator reports a Simple field read on
that List when the file is written, with the same jsonpath advice. Groovy is
left alone (body.orderId of a List is the List of the orderIds there).
*A field read after a marshal of a body that is not known* (enrich-and-dedupe
step 3)
In a direct: route a wire tap sends the order Map to, the model marshalled and
then logged ${body[orderId]}. The body before the marshal is not known there,
and the advice was "unmarshal: json is the step, not marshal". The model added
an unmarshal of the Map, which failed at runtime. The advice now first says to
read the field before the marshal, and to unmarshal only when the body was text
that was meant to be parsed.
*A variableSend of a header* (ai-ticket-classifier step 1)
The model set a header prompt and sent variableSend: prompt to the chat model,
which then got an empty request. When the route sets a header of that name and
no step sets the variable (and no bean, processor or script could), the
validator says to set it with setVariable.
*A setBody that emptied the body* (http-client step 1)
The route set the body to ${null} and then read ${body[sku]}. The runtime hint
said "read the data first - setBody with constant: resource:file:...", which
did not fit. When the message history shows that a setBody or a transform
emptied the body, the hint names that step and says to read what is needed
before it, or to write a fixed value as a constant.
_Filed by Claude Code on behalf of davsclaus_
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)