[
https://issues.apache.org/jira/browse/CAMEL-23983?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen updated CAMEL-23983:
--------------------------------
Fix Version/s: 4.22.0
> camel-yaml-dsl-maven-plugin - @YamlProperty flag emission broken:
> withRequired(isDeprecated) typo drops required/deprecated on non-String
> properties, secret never emits format=password
> ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-23983
> URL: https://issues.apache.org/jira/browse/CAMEL-23983
> Project: Camel
> Issue Type: Bug
> Components: camel-yaml-dsl
> Affects Versions: 4.21.0
> Reporter: Federico Mariani
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.22.0
>
>
> Two related codegen bugs in {{@YamlProperty}} annotation emission in
> {{dsl/camel-yaml-dsl/camel-yaml-dsl-maven-plugin}}:
> h3. 1. withRequired(isDeprecated(field)) typo (11 sites)
> In {{GenerateYamlDeserializersMojo.java}} (lines 1027, 1042, 1060, 1078,
> 1094, 1110, 1126, 1190, 1216, 1232, 1250) the builder chain is:
> {code:java}
> .withRequired(isRequired(field))
> .withRequired(isDeprecated(field)) // should be withDeprecated
> {code}
> {{AnnotationBuilder.withRequired}} is a plain setter, so the second call
> overwrites the required flag with the deprecation flag. The String branches
> (lines 999, 1147, 1162, 1173) use the correct {{withDeprecated}} pattern,
> confirming the intent. Affected branches: enum, metadata-enum, byte[],
> boolean/int/long/double primitives, Class, numeric/Boolean wrappers, and the
> default object branch.
> Effect: any *required non-String* model attribute silently loses its required
> constraint in the generated deserializers and in the published
> {{camelYamlDsl.json}} (e.g. {{ParamDefinition.type}} is
> {{@XmlAttribute(required = true)}} but the schema lists only {{name}} as
> required), and deprecated fields in these branches are never marked
> deprecated. Regression introduced by the CAMEL-19709 refactor
> ({{a52062950297}}); the pre-refactor code correctly emitted {{required}}.
> h3. 2. secret -> format="password" propagation is dead end-to-end
> * {{YamlProperties.AnnotationBuilder.withIsSecret(JsonNode)}}
> ({{support/YamlProperties.java:138-150}}) returns early unless
> {{node.isTextual()}}, but the catalog JSON {{secret}} attribute is a
> *boolean* — so {{format = "password"}} can never be emitted (0 occurrences in
> the generated {{ModelDeserializers.java}}). Compare {{withDefaultValue}},
> which correctly accepts textual/number/boolean.
> * Additionally, {{GenerateYamlDeserializersMojo.java:912,951}} pass
> {{descriptor.defaultValue(name)}} into {{withIsSecret}} instead of
> {{descriptor.isSecret(name)}} (copy-paste), which would wrongly mark
> properties with a textual default of "true" as secret once the boolean check
> is fixed.
> Fixing either bug requires regenerating {{ModelDeserializers.java}} and the
> YAML schema, and downstream consumers of {{camelYamlDsl.json}} (validators,
> editors/LSP) will start seeing the correct
> {{required}}/{{deprecated}}/{{password}} metadata.
> _Filed by Claude Code on behalf of Croway._
--
This message was sent by Atlassian Jira
(v8.20.10#820010)