[ 
https://issues.apache.org/jira/browse/CAMEL-24694?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18114470#comment-18114470
 ] 

Claus Ibsen commented on CAMEL-24694:
-------------------------------------

Generator: 
dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin/src/main/java/org/apache/camel/maven/dsl/yaml/GenerateYamlSchemaMojo.java
 (around line 439, where propertyType boolean/number is emitted as the JSON 
schema type). The generated file is 
dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json.
 The fix is in the mojo: when the model field is a String, emit a type union 
with "string".

> YAML DSL JSON schema rejects scalar values the runtime accepts (String model 
> fields typed as boolean/integer)
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-24694
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24694
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-catalog, 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)

Reply via email to