[
https://issues.apache.org/jira/browse/CAMEL-23596?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-23596.
---------------------------------
Resolution: Fixed
> camel-yaml-io - Replace hand-written YamlWriter with generated direct YAML
> writer
> ---------------------------------------------------------------------------------
>
> Key: CAMEL-23596
> URL: https://issues.apache.org/jira/browse/CAMEL-23596
> Project: Camel
> Issue Type: Improvement
> Components: camel-core
> Reporter: Claus Ibsen
> Assignee: Claus Ibsen
> Priority: Major
> Fix For: 4.21.0
>
>
> The YAML dump mechanism in camel-yaml-io uses a hand-written YamlWriter (600
> lines) with 43+ hardcoded element names and special cases. Every new EIP that
> has configuration children (like circuitBreaker + resilience4jConfiguration)
> or introduces a new container type (like rests) silently produces wrong YAML
> until someone manually adds another special case.
> The root cause: the generated ModelWriter emits a flat
> startElement/attribute/endElement stream (designed for XML), and YamlWriter
> must re-classify every child element at runtime to decide if it is a step, a
> configuration property, an expression, or a structural child. This
> classification is entirely hardcoded.
> Proposal: Replace the hand-written YamlWriter + EipNode + Jackson pipeline
> with a generated direct writer that builds JsonObject/JsonArray structures
> and a small hand-written YamlPrinter that serializes them to YAML text. No
> Jackson dependency needed.
> Current pipeline (6 conversions):
> Model -> Generated ModelWriter -> YamlWriter.startElement/endElement ->
> EipModel metadata -> EipNode -> JsonObject -> JSON String -> Jackson
> ObjectMapper -> JsonNode -> Jackson YAMLMapper -> YAML String -> post-process
> (strip indent)
> New pipeline (2 conversions):
> Model -> Generated YamlModelWriter -> JsonObject/JsonArray -> YamlPrinter ->
> YAML String
> Benefits:
> - No more hardcoded special cases that break when new EIPs are added
> - Classification of config children vs steps vs expressions happens at
> code-generation time
> - Removes jackson-dataformat-yaml dependency from camel-yaml-io
> - Simpler pipeline with full control over YAML output format
> - Automatically correct when the model changes (new options, new EIPs)
--
This message was sent by Atlassian Jira
(v8.20.10#820010)