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/28 07:56:00 UTC

[jira] [Created] (CAMEL-25079) camel-yaml-io, camel-java-io - Route dumpers produce invalid YAML and Java: fix bugs found in a deep review

Claus Ibsen created CAMEL-25079:
-----------------------------------

             Summary: camel-yaml-io, camel-java-io - Route dumpers produce invalid YAML and Java: fix bugs found in a deep review
                 Key: CAMEL-25079
                 URL: https://issues.apache.org/jira/browse/CAMEL-25079
             Project: Camel
          Issue Type: Bug
          Components: camel-core
            Reporter: Claus Ibsen


A deep review of the route dumpers to YAML and Java (camel-yaml-io, camel-java-io), which are used by the dev console route-dump, JMX, dumpRoutes, camel-jbang and the TUI, found the bugs below. Each one was reproduced against 4.23.0-SNAPSHOT and has a test that fails without the fix (LwModelToJavaDumperTest, YamlPrinterRoundTripTest, YamlWriterEdgeCasesTest).

# *The Java dump of a route template, rest, route configuration or rest configuration is not valid Java* (such as .routeTemplate().id("tpl")...). The dumper used the generated generic writer instead of the Java DSL writers that JavaDslCompileTest compiles.
# *The Java dump of a multi-line expression is not valid Java*, as a line break was not escaped in the string literal.
# *The YAML dump is not valid YAML, or reads back as another value, for common strings*: a trailing colon (log("Processing:")), a leading , ] or }, a carriage return, a multi-line value whose first line starts with a space, more than one trailing line break, and text that YAML reads as a number (007, +5, 1., .inf).
# *The YAML dump turns text attributes into numbers*: setHeader("007") was dumped as 7, 1d as 1.0, 1e3 as 1000.0, and a template default 0800 as 800. A value is now only a number when it is written as that number.
# *dumpDataFormatsAsYaml writes the dataFormats twice and as one map*, so it could not be loaded, and two data formats of the same kind overwrote each other. It is now a list of data formats, as the YAML DSL loads them.

*Not changed (for a later look, these are in the generated writers)*
* The YAML dump of a rest loses the verb (get/post) and uses keys the YAML DSL does not accept (verbs, params, responseMsgs).
* The YAML dump of route templates and templated routes uses templateParameter/templateBean and parameter/bean instead of parameters/beans.
* The Java dump of circuitBreaker writes onFallback before the steps, so the steps go into the fallback.
* resolvePlaceholders for routes created from templates uses the parameters of the last route (YAML) or none (Java).
* dumpBeansAsYaml is built without escaping.

_Claude Code on behalf of Claus Ibsen_




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