[ 
https://issues.apache.org/jira/browse/CAMEL-24704?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-24704 started by Adriano Machado.
-----------------------------------------------
> camel-yaml-dsl - accept beans (and other name-keyed lists) written as a map 
> keyed by name
> -----------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24704
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24704
>             Project: Camel
>          Issue Type: Improvement
>          Components: camel-yaml-dsl
>            Reporter: Claus Ibsen
>            Assignee: Adriano Machado
>            Priority: Major
>
> In the YAML DSL beans are a list of items with a name property:
> {code}
> - beans:
>     - name: myProcessor
>       type: "#class:com.example.MyProcessor"
> {code}
> Every other configuration format keys a bean by its name, and that is what 
> both people and AI models write first (seen in 3 of the 6 benchmark runs on 
> 2026-09-12, every time as one of these two shapes):
> {code}
> - beans:
>     myProcessor:
>       type: "#class:com.example.MyProcessor"
> {code}
> {code}
> - beans:
>     - myProcessor:
>         type: "#class:com.example.MyProcessor"
> {code}
> Both are rejected ("object found, array expected", "required property 'name' 
> not found"). Since a bean name is unique in the file, the map form is 
> unambiguous, and YAML maps keep their order, so nothing is lost. Proposal: 
> accept the map form as an alternative, keep the list as the canonical form 
> (the normalizer and the canonical validator keep producing and requiring the 
> list), and document only one of them as primary.
> Where: BeansDeserializer (hand written, camel-yaml-dsl-deserializers) reads a 
> MappingNode as name -> bean; GenerateYamlSchemaMojo emits beans as oneOf [the 
> current array, an object with additionalProperties: the bean definition]; the 
> YAML DSL validator and the TUI/MCP validation follow the schema; Kaoto and 
> other consumers of the schema need to read both forms.
> Other lists in the schema whose items are identified by a required name, 
> found by walking camelYamlDsl.json, where the same map form would be as 
> natural:
> || property || item type || used by || map form ||
> | beans | BeanFactoryDefinition | root, routeTemplate, templatedRoute | 
> beans: {myBean: {type: ...}} |
> | parameters | RouteTemplateParameterDefinition / 
> TemplatedRouteParameterDefinition | routeTemplate, templatedRoute | 
> parameters: {name: {defaultValue: ...}} or name: default |
> | headers | SetHeaderDefinition | setHeaders | headers: {foo: {constant: x}} |
> | variables | SetVariableDefinition | setVariables | variables: {foo: 
> {simple: ...}} |
> | param | ParamDefinition | rest get/post/put/delete/patch/head | param: {id: 
> {type: path, ...}} |
> | header | ResponseHeaderDefinition | rest responseMessage | header: {name: 
> {...}} |
> | univocityHeader | UniVocityHeader | univocity data formats | (rare) |
> Lists whose items only have an optional id (rest, get/post, when, doCatch) 
> have no natural key and should stay lists.
> Suggested order: beans first (the case that fails in practice), then 
> setHeaders/setVariables and the template parameters, which a model also tends 
> to write as maps. Each needs the deserializer, the schema, a validator test 
> and a doc line. Found while benchmarking a local model against the YAML DSL; 
> the validator on CAMEL-24698 meanwhile tells the user how to rewrite the map 
> form as the list.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to