[
https://issues.apache.org/jira/browse/CAMEL-25555?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Federico Mariani updated CAMEL-25555:
-------------------------------------
Fix Version/s: 4.24.0
> camel-jbang - camel validate normalize --output <dir> should write one file
> per input file, so a top-level onException keeps its scope
> --------------------------------------------------------------------------------------------------------------------------------------
>
> Key: CAMEL-25555
> URL: https://issues.apache.org/jira/browse/CAMEL-25555
> Project: Camel
> Issue Type: Improvement
> Components: camel-jbang
> Reporter: Federico Mariani
> Assignee: Federico Mariani
> Priority: Major
> Fix For: 4.24.0
>
>
> When {{camel validate normalize}} is given several route files and an output
> directory, it still merges all the routes into one {{normalized.yaml}} (only
> Kamelets are written to a file of their own). Since CAMEL-25490 a top-level
> {{onException}} is dumped as a top-level element before the first route, so
> in the merged file it applies to the routes of *all* the input files, while
> in the source it applied only to the routes of its own file.
> h3. Example (main, 4.23.0-SNAPSHOT; same on 4.22.2-SNAPSHOT)
> {code:yaml|title=a.yaml}
> - route:
> id: fromA
> from:
> uri: timer:a
> steps:
> - log:
> message: "A"
> {code}
> {code:yaml|title=b.yaml}
> - onException:
> exception:
> - java.lang.Exception
> handled:
> constant: "true"
> steps:
> - log:
> message: "B failed"
> - route:
> id: fromB
> from:
> uri: timer:b
> steps:
> - log:
> message: "B"
> {code}
> {{camel validate normalize a.yaml b.yaml --output=out/}} writes
> {{out/normalized.yaml}} with the {{onException}} of {{b.yaml}} first, then
> the routes {{fromA}} and {{fromB}}. Loading it, the {{onException}} of
> {{b.yaml}} now also handles the errors of {{fromA}}. If {{a.yaml}} and
> {{b.yaml}} both have a top-level {{onException}} for the same exception, they
> get the same {{ExceptionPolicyKey}} and the last one wins, so the routes of
> {{a.yaml}} silently get the handler of {{b.yaml}}.
> The dump strategy logs a WARN for this ({{DefaultDumpRoutesStrategy}}, added
> in CAMEL-25490), but {{camel validate normalize}} runs with the dump log
> turned off, so the user does not see it.
> h3. Proposal
> When {{--output}} is a directory, write one normalized file per input file
> (as is already done for Kamelets, and as {{camel.main.dumpRoutesOutput}} does
> when it is a directory: one file per resource), keeping each file's name.
> That keeps the scope of each top-level {{onException}} exactly. With a single
> output file (or no {{--output}}), keep merging, and print a warning from the
> command when a top-level {{onException}} of one file ends up applying to the
> routes of other files.
> Points to decide:
> * the file names in the output directory when two inputs share a name in
> different directories;
> * what goes into each file for elements that are not tied to a resource
> (beans, data formats, rests, route configurations loaded from another file).
> Related: CAMEL-25490 (discussed in the review of
> [#27609|https://github.com/apache/camel/pull/27609]).
> _Claude Code on behalf of Croway_
--
This message was sent by Atlassian Jira
(v8.20.10#820010)