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 2012/09/14 13:12:07 UTC

[jira] [Resolved] (CAMEL-5601) Error handler route level is wrong

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

Claus Ibsen resolved CAMEL-5601.
--------------------------------

       Resolution: Not A Problem
    Fix Version/s: 2.11.0
         Assignee: Claus Ibsen

You have 2 routes each with a timer, that both sends a message, which is then forced to throw an exception, each with their own caused message. The error handler is context scoped, and handles the errors from both routes.

Bottom line.

You have 2 messages (one for each route). And the context scoped error handler, will handle each message = why you see 2 in the log.
                
> Error handler route level is wrong
> ----------------------------------
>
>                 Key: CAMEL-5601
>                 URL: https://issues.apache.org/jira/browse/CAMEL-5601
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.9.3
>            Reporter: Xiaoli Ding
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.11.0
>
>         Attachments: CamelTester.java
>
>
> step1:add one route begin with Error handler component whose dead letter url is "direct:b".
> step2:add second route with without error handler component.
> step3:add the deadLetterChannel with url:"direct:b"
> the generated code are:
> {noformat} 
> 		@Override
> 	public void configure() throws Exception {
> 		errorHandler(deadLetterChannel("direct:b"))
> 				.from("timer:myTimer1?repeatCount=1")
> 				.process(new org.apache.camel.Processor() {
> 					public void process(org.apache.camel.Exchange exchange)
> 							throws Exception {
> 						throw new Exception("exception1");
> 					}
> 				}).id("cProcessor_1");
> 		from("timer:myTimer2?repeatCount=1")
> 				.routeId("Sender_cMessagingEndpoint_1")
> 				.process(new org.apache.camel.Processor() {
> 					public void process(org.apache.camel.Exchange exchange)
> 							throws Exception {
> 						throw new Exception("exception2");
> 					}
> 				}).id("cProcessor_3");
> 		from("direct:b")
> 				.routeId("toProcessStartRouteLevel_cMessagingEndpoint_4")
> 				.process(new org.apache.camel.Processor() {
> 					public void process(org.apache.camel.Exchange exchange)
> 							throws Exception {
> 						Exception exception = (Exception) exchange.getProperties().get("CamelExceptionCaught");
> 						if(exception != null){
> 							System.out.println("error message:" + exception.getMessage());
> 						}
> 					}
> 				}).id("cProcessor_4");
> 	}
> {noformat} 
> when run it,error handler deal with first and second exception which throwed by two route,the output is:
> {noformat} 
> error message:exception2
> error message:exception1
> {noformat}
> but expect deal with first  exception,expect the output is:
> {noformat}
> error message:exception1
> {noformat}
> the whole class is in attachment(CamelTester.java)

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira