Hi Y'all,
I have been working on the error handling for my route and could use a
little help to get me to the finish line.
My strategy is simplistic, I'll put a doTry/doCatch on the main route and
have all the subroutes bubble up the exception. So far, with the aid of the
docs+forum I have been able to do this but there is still one case that I
can't figure out, the aggregate.
Here is a 

        public class SimpleSplitter {
                private String id;
                public SimpleSplitter(String id){this.id=id;}
                public List<Message> split(Message incoming) {
                        List<Message>msgs=new java.util.ArrayList<Message>();
                        for(int i=0;i<5;i++){
                                DefaultMessage msg=new DefaultMessage();
                                msg.setHeader("groupid",id);
                                msg.setHeader("groupsize", 5);
                                msgs.add(msg);
                        }
                        return msgs;
                }
        }
        public class SimpleProcessor implements Processor {
                private boolean blowup=false;
                public SimpleProcessor(boolean blowup){this.blowup=blowup;}
                public void process(Exchange exchange) throws Exception {
                        System.out.println("PROCESSING 
"+exchange.getIn().getHeaders());
                        if(blowup)throw new RuntimeException("KABOOM!");
                }
        }
        public void configure() throws Exception {
                SimpleSplitter splitter=new SimpleSplitter("first");
                SimpleProcessor processor=new SimpleProcessor(false);
                SimpleProcessor processorBlowsUp=new SimpleProcessor(true);

                from(STARTPOINT_URI)
                .doTry()
                        .to("direct:split_it")
                        .doCatch(Throwable.class)
                        
.to("log:logic.export?level=ERROR&showStackTrace=true&showCaughtException=true")
                                .log("In Catch")
                        .doFinally()
                                .log("In Finally")
                        .end()
                .end();

                from("direct:split_it")
                        .errorHandler(noErrorHandler())
                        .split(bean(splitter)).parallelProcessing()
                        .to("direct:process_it");
        
                from("direct:process_it")
                        .errorHandler(noErrorHandler())
                        .process(processor)
                        .to("direct:aggregate_it");
        
                from("direct:aggregate_it")
                        .errorHandler(noErrorHandler())
                                .aggregate(header("groupid"),new 
UseLatestAggregationStrategy())
                                .completionSize(header("groupsize"))
                                        .to("direct:postprocess_it");
        
                from("direct:postprocess_it")
                        .errorHandler(noErrorHandler())
                        .process(processorBlowsUp);
        }
Ok, hopefully that comes through reasonably formatted. The idea here is that
I have a main route with a try/catch/finally and in the try i call out to
various subroutes, specifically i 1)split it, 2) process it, 3)aggregate it,
and 4) post process it.
I plant runtime exceptions in various places of the subroutes and expect the
doCatch to be called. This works in all cases except for the postprocess_it
subroute. If I can cut out the aggregate and go straight to the postprocess
subroute, then it works, so I know the aggregator is "handling" the
exception, the doCatch does not get called, but the doFinally does. 
I need your help in identifying what camel-fu is needed around the aggregate
so that it doesn't try to handle the exception and just let it bubble up to
the parent's doCatch.
thanx in advance!

--
View this message in context: 
http://camel.465427.n5.nabble.com/doTry-doCatch-with-an-aggregate-tp5581510p5581510.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to