I have route like this:

errorHandler(transactionErrorHandler().maximumRedeliveries(0));

from("seda:fileInput")
  .onException(IllegalArgumentException.class).maximumRedeliveries(0)   
    .log( idExpr + "Error occured during processing of Data")
  .end()
.transacted()
.split(myFileSplitterExp(inFile))
   .streaming()
  .stopOnException()
  .bean(myBean)
.aggregate(header(HeaderConstant.JOB_ID), new
MyStringBuilderAggregationStrategy())           
.completionSize(10)
.completionTimeout(2000)
.completionPredicate(
header(Exchange.SPLIT_COMPLETE).isEqualTo(Boolean.TRUE))
.to("direct:updateDB");



with aggregationStrategy defined as:

private class MyStringBuilderAggregationStrategy implements
AggregationStrategy {
        @Override
                public Exchange aggregate(final Exchange oldExchange, final 
Exchange
newExchange) {
                        final DataSet newBody = 
newExchange.getIn().getBody(DataSet.class);
                        List <DataSet>list = null;
                if(newExchange != null && newExchange.getException()!=null )
                {
                        log.info("exception caught***" + 
newExchange.getException());
                }else if (oldExchange != null && oldExchange.getException()!= 
null)
                {
                        log.info("exception caught in oldExc***" + 
oldExchange.getException());
                }else
                        log.info("no exception ****");
        
                        
                        if (oldExchange == null) {
                                list = new ArrayList<DataSet>();
                                list.add(newBody);
                                newExchange.getIn().setBody(list);
                                return newExchange;
                        } else {
                                list = oldExchange.getIn().getBody(List.class);
                                list.add(newBody);
                                return oldExchange;
                        }}}
The problem is We are unable to get hold of exception in 
MyStringBuilderAggregationStrategy, in case some exception occurs in myBean
for some invalid record.

Exchange.getEception() is null as against the example in Chpater 8 of the
book.

Also with stopOnException() though we are able to stop further processing of
Exchange messages and rollback  the Batch records inserted before the
errornous Exchange using errorHandler(transactionErrorHandler()).But, since
we are unable to catch the exception on this errornous Batch(subExchange of
parent exchange) we are unable to dump the records which were aggregated
before the error of the same errornous Batch and it goes for further
processing to ("direct:updateDB") endpoint which is DB insertion.



--
View this message in context: 
http://camel.465427.n5.nabble.com/Exception-not-propagated-in-Splitter-Aggregator-EIP-tp5714533.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Reply via email to