[ 
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)

Reply via email to