[ 
https://issues.apache.org/jira/browse/CAMEL-19441?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Claus Ibsen resolved CAMEL-19441.
---------------------------------
    Resolution: Not A Bug

The child route handles(true) the exception so there is no exception from the 
outer route point of view

> Camel does not continue routing after doTry..doCatch..end block in case of 
> Direct Component.
> --------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-19441
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19441
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core, camel-core-api
>    Affects Versions: 3.14.7
>            Reporter: Harish Annamalai
>            Priority: Major
>
> Camel Does not continue routing with a doTry..doCatch..end block with direct 
> component with a onException clause defined in it.
> I have created two routes namely, MainRoute and childRoute. 
> The ChildRoute consists of an onExceptionBlock, with "handled(true)" clause. 
> when an exception occurs in the childRoute, the onExceptionBlock executes and 
> the chlidRoute execution stops. However, the flow doesn't continue on the 
> mainRoute.
> Camel DSL for the two routes:
> from("timer://runOnce?repeatCount=1&delay=1000")
>                 .id("MainRoute")
>                 .onException(Exception.class)
>                 .setBody(constant("ExceptionBLock"))
>                 .to("log://error")
>                 .handled(true)
>                 .end()
>                 .setHeader("routeLocation", constant("MainRoute"))
>                 .setBody(constant("MainRoute"))
>                 .to("log://main")
>                 .doTry()
>                     .to("direct://childRoute")
>                 .doCatch(Exception.class)
>                     .to("log://ExceptionCatchBlock")
>                 .end()
>                 .to("log://afterTryCatch")
>                 .end();
> ------------------
>         from("direct://childRoute")
>                 .id("ExceptionRoute")
>                 .onException(Exception.class)
>                 .useOriginalMessage()
>                 .handled(true)
>                 .setBody(constant("Child Exception Block"))
>                 .to("log://childExceptionSubProcess")
>                 .end()
>                 .setHeader("routeLocation", constant("exceptionRoute"))
>                 .setBody(constant("Exception Route"))
>                 .to("log://beforeException")
>                 .throwException(new RuntimeException("A runtime exception"))
>                 .to("log://afterException")
>                 .end();
>  
> {{Output:}}
> {{2023-06-13 16:30:20.876  INFO 3500 — [timer://runOnce] *main* : 
> Exchange[ExchangePattern: InOnly, BodyType: String, Body: MainRoute]}}
> {{2023-06-13 16:30:20.880  INFO 3500 — [timer://runOnce] *beforeException* : 
> Exchange[ExchangePattern: InOnly, BodyType: String, Body: Exception Route]}}
> {{2023-06-13 16:30:20.883  INFO 3500 — [timer://runOnce] 
> *childExceptionSubProcess* : Exchange[ExchangePattern: InOnly, BodyType: 
> String, Body: Child Exception Block]}}
> {{In the above routes, when the exception occurred in the childRoute, the 
> onException block in childRoute executes, however, the 
> {color:#ff0000}.to("log://afterException") of the mainRoute 
> {color}{color:#172b4d}{{doesn't execute.}}{color}}}
> {color:#172b4d}As per the documentation, the doTry..doCatch block mimic the 
> Java, try..catch block.{color}
> {color:#172b4d}{{Here the routing breaks on the mainRoute. Contrary to the 
> try..catch of java, where exception handling inside a called method doesn't 
> affect the caller.}}{color}



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

Reply via email to