I am trying to properly configure error handler with onException on this route:
<route id="cashReservationsRoute" handleFault="true"> <from uri="direct:startCashReservationsRoute" /> <onException> <exception>org.apache.cxf.interceptor.Fault</exception> <continued><constant>true</constant></continued> <log message="getCashReservations() error ignored" /> <!-- <process ref="errorHandlerProcessor" /> --> </onException> <!-- Prepare GetReservationsCashReportReq --> <process ref="prepareCashReservationsRequestProcessor" /> <!-- Add server token to request --> <enrich uri="direct:getServerToken" strategyRef="setTokenToGenericRequestStrategy" /> <to uri="cxf:bean:dgwEndpoint" /> <log message="Retrieved cash reservations" /> </route> This route is invoked by an enrich EIP in the following route: <route id="terminalsConfiguration"> <from uri="direct:startTerminalsConfiguration" /> ... ... <split> <simple>${body}</simple> <log message="Processing terminal with IP address: ${body.ipAddress}" /> <!-- 2. enrich the collection by adding MachineCredential instances --> <enrich uri="direct:startMachinesCredentialsRoute" strategyRef="setMachinesCredentialStrategy" /> <log message="Retrieved credentials for terminal: ${body.ipAddress}" /> <!-- HERE THE cashReservationsRoute IS CALLED--> <enrich uri="direct:startCashReservationsRoute" strategyRef="setCashReservationsStrategy" /> <!-- 4.2. Add terminal profile into cache --> <process ref="setCacheHeadersProcessor" /> <to uri="cache://credentialsCache" /> <log message="Updated credentials cache. Key: ${header.CACHE_KEY} - Value: ${body}" /> </split> <process ref="logoutServerProcessor" /> <to uri="direct:logoutUser" /> </route> What I want to achieve is to ignore any errors raised by the cxf endpoint in the first route and to continue processing the <split> route. What happens is that the DefaultErrorHandler kicks in and simply skips all the processors following the failing enrich, going straight to the next split body. Here is the log: [ default-workqueue-5] terminalsConfiguration INFO Processing terminal with IP address: 192.168.1.3 [ default-workqueue-5] route2 INFO Server token retrieved from token cache. Value: 1310724816172 [ default-workqueue-5] terminalsConfiguration INFO Retrieved credentials for terminal: 192.168.1.3 [ default-workqueue-5] route2 INFO Server token retrieved from token cache. Value: 1310724816172 [ default-workqueue-5] cashReservationsRoute INFO getCashReservations() error ignored [ default-workqueue-5] DefaultErrorHandler ERROR Failed delivery for exchangeId: ID-localhost-55736-1310724793588-0-26. Exhausted after delivery attempt: 1 caught: org.apache.cxf.binding.soap.SoapFault: Testing only org.apache.cxf.binding.soap.SoapFault: Testing only at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)[cxf-rt-bindings-soap-2.3.2.jar:2.3.2] at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)[cxf-rt-bindings-soap-2.3.2.jar:2.3.2] at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)[cxf-rt-bindings-soap-2.3.2.jar:2.3.2] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)[cxf-api-2.3.2.jar:2.3.2] at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:99)[cxf-rt-core-2.3.2.jar:2.3.2] at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)[cxf-rt-bindings-soap-2.3.2.jar:2.3.2] at org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)[cxf-rt-bindings-soap-2.3.2.jar:2.3.2] at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:255)[cxf-api-2.3.2.jar:2.3.2] at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:737)[cxf-rt-core-2.3.2.jar:2.3.2] at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2335)[cxf-rt-transports-http-2.3.2.jar:2.3.2] at org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream$1.run(HTTPConduit.java:2198)[cxf-rt-transports-http-2.3.2.jar:2.3.2] at org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueImpl.java:253)[cxf-rt-core-2.3.2.jar:2.3.2] at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)[:1.6.0_26] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)[:1.6.0_26] at java.lang.Thread.run(Thread.java:680)[:1.6.0_26] [ default-workqueue-5] terminalsConfiguration INFO Processing terminal with IP address: 192.168.1.4 If I configure the route like this: <route id="cashReservationsRoute" handleFault="true"> <from uri="direct:startCashReservationsRoute" /> <!-- Prepare GetReservationsCashReportReq --> <process ref="prepareCashReservationsRequestProcessor" /> <!-- Add server token to request --> <enrich uri="direct:getServerToken" strategyRef="setTokenToGenericRequestStrategy" /> <doTry> <to uri="cxf:bean:dgwEndpoint" /> <log message="Retrieved cash reservations" /> <doCatch> <exception>org.apache.cxf.interceptor.Fault</exception> <log message="getCashReservations() error ignored" /> <process ref="errorHandlerProcessor" /> <!-- this does nothing special, simply substitutes the out Fault with an empty bean. It is not defined in the <onException> otherwise the route would stop processing there --> </doCatch> </doTry> </route> everything works wonderfully, simply because the DefaultErrorHandler is not used. This is the log: [ default-workqueue-5] terminalsConfiguration INFO Processing terminal with IP address: 192.168.1.3 [ default-workqueue-5] route2 INFO Server token retrieved from token cache. Value: 1310724676861 [ default-workqueue-5] terminalsConfiguration INFO Retrieved credentials for terminal: 192.168.1.3 [ default-workqueue-5] route2 INFO Server token retrieved from token cache. Value: 1310724676861 [ default-workqueue-5] cashReservationsRoute INFO getCashReservations() error ignored Testing only [ default-workqueue-5] terminalsConfiguration INFO Updated credentials cache. Key: 3619_0003 - Value: com.ncr.a2e.ing.routes.security.Terminal@1d764a75 [ default-workqueue-5] terminalsConfiguration INFO Processing terminal with IP address: 192.168.1.4 I have tried using all the different error handlers, no luck. I have tried to change from "continued" to "handled", no luck. I would like to use onException, because it seems the preferred method to handle exceptions, but I simply cannot do it. I think that the fact that doTry...doCatch supersedes the error handling mechanism should be pointed out in the Camel in Action book. Alberto -- View this message in context: http://camel.465427.n5.nabble.com/onException-vs-doTry-doCatch-tp4590348p4590348.html Sent from the Camel - Users mailing list archive at Nabble.com.