You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Claus Ibsen (Jira)" <ji...@apache.org> on 2026/09/11 20:59:00 UTC
[jira] [Updated] (CAMEL-24694) YAML DSL validator rejects scalar values the runtime accepts (quoted booleans/numbers and placeholders at typed attributes)
[ https://issues.apache.org/jira/browse/CAMEL-24694?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Claus Ibsen updated CAMEL-24694:
--------------------------------
Component/s: (was: camel-catalog)
Summary: YAML DSL validator rejects scalar values the runtime accepts (quoted booleans/numbers and placeholders at typed attributes) (was: YAML DSL JSON schema rejects scalar values the runtime accepts (String model fields typed as boolean/integer))
> YAML DSL validator rejects scalar values the runtime accepts (quoted booleans/numbers and placeholders at typed attributes)
> ---------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-24694
> URL: https://issues.apache.org/jira/browse/CAMEL-24694
> Project: Camel
> Issue Type: Bug
> Components: camel-yaml-dsl
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
>
> h3. Problem
> The generated YAML DSL JSON schema ({{camelYamlDsl.json}}) types scalar attributes from the model's {{@Metadata(javaType=...)}} rather than from the Java field type. Most EIP attributes are declared as {{String}} in the model precisely so that property placeholders ({{{{myValue}}}}) can be used, and the YAML deserializer converts the text at runtime. The schema is therefore stricter than the runtime, in both directions:
> * {{SplitDefinition.parallelProcessing}} and {{streaming}} are {{String}} fields with {{javaType=java.lang.Boolean}}; the schema emits {{boolean}}, so {{parallelProcessing: "true"}} is rejected ("string found, boolean expected") although {{camel run}} starts the route.
> * {{ThrottleDefinition.timePeriodMillis}} is a {{String}} field with {{javaType=java.time.Duration}}; the schema emits {{string}}, so {{timePeriodMillis: 10000}} is rejected ("integer found, string expected") although {{camel run}} starts the route.
> * {{RestConfigurationDefinition.port}} and resilience4j {{waitDurationInOpenState}} behave the same way (integer rejected, string required).
> h3. Why it matters
> Every consumer of the schema refuses input the runtime accepts: {{camel validate yaml}}, the Camel TUI save-time validation and its {{tui_write_file}} / {{tui_validate_source}} MCP tools, camel-jbang-mcp {{camel_validate_yaml_dsl}}, IDE plugins and Kaoto. On 2026-09-11, 41 of the 280 YAML examples in the EIP documentation failed validation for this reason alone, and in an AI-assisted editing benchmark two of the four corrections a frontier model needed, and a large share of a local model's refused writes, were this exact class ("integer found, string expected" / "string found, boolean expected").
> h3. Suggested fix (generator, not hand edits)
> In the schema generator, for any model attribute whose Java field type is {{String}}, emit a type union that accepts the string form as well as the natural scalar: {{"type": ["string", "boolean"]}}, {{["string", "integer"]}}, {{["string", "number"]}}. Keep the natural scalar first so completion and documentation still show the intended type. Since placeholders make every such attribute a valid string at runtime, this only removes false rejections; the runtime type converter still reports genuinely wrong values.
> Optionally normalise the doc examples to the natural scalar form (see the companion samples issue), but the schema should accept both.
> h3. Reproducer
> {code}
> - route:
> from:
> uri: timer:tick?period=1000
> steps:
> - split:
> parallelProcessing: "true"
> tokenize: ","
> steps:
> - log: "${body}"
> {code}
> {{camel validate yaml}}: {{/0/route/from/steps/0/split/parallelProcessing: string found, boolean expected}}. {{camel run}}: Routes startup (total:1).
> Related: CAMEL-24692 (simple validator placeholder bug).
--
This message was sent by Atlassian Jira
(v8.20.10#820010)