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)

Reply via email to