camel-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sebastian Gomez <sage...@gmail.com>
Subject Re: Perfect Error Handling in servicemix-camel-2009.01
Date Mon, 30 Nov 2009 16:35:00 GMT
Hi Willem,

Thanks for answering. I see it's being thrown from servicemix-camel
component, but is it this this how the component should work? Shouldn't it
convert the JBI exception into a Camel exception so as to permit the Camel
error handler to be in charge of it?

Sebastian Gomez.

On Mon, Nov 30, 2009 at 2:41 PM, Willem Jiang <willem.jiang@gmail.com>wrote:

>
> Hi,
>
> From the stack trace it looks like the exception is throw from
> ServiceMix-Camel component, so you can't check it with the error handler in
> the CamelContext.
>
>
> Willem
>
> Sebastian Gomez wrote:
>
>> Forwarding to users@camel.apache.org.
>>
>> Hope someone can help me out.
>>
>> Sebastian Gomez.
>>
>> On Thu, Nov 26, 2009 at 9:02 PM, Sebastian Gomez <sage.es@gmail.com>
>> wrote:
>>
>>  Hi everyone,
>>>
>>> I've been reading all the documentation I've found on error handling in
>>> Camel, but it looks there are so many ways to do it I can't make up my
>>> mind
>>> on which is best. I guess depending on the scenario there will be better
>>> and
>>> worse combinations. Hope someone can recommend me a way of handling
>>> faults
>>> given my scenario:
>>>
>>> * I'm using servicemix-camel-2009.01, i.e. Camel 1.6.0, therefore I can't
>>> use doTry/doCatch/doFinally.
>>> * I want to handle absolutely ALL exceptions and faults generated in the
>>> routes, and hande them with custom processors.
>>>
>>> My main concern is that I'm using a splitter (serial, not parallel) that
>>> generates a few messages that call a web service (on cxf-bc). If the web
>>> service doesn't answer on time, Camel receives a JBI Fault due to timeout
>>> and doesn't seem to know how to handle it. It then throws a
>>> RuntimeException
>>> that, although Camel is supposed to carry on processing in case of
>>> exception, stops the whole flux of messages. I've seen something related
>>> to
>>> the piece of code where the exception is thrown has been talked about
>>> here
>>> [1]. I've tried adding errorHandlers, onExceptions and tryBlocks to the
>>> route but none of them seem to catch the exception and continue
>>> processing
>>> messages.
>>>
>>> Could someone help me out indicating the preferred fault handling
>>> solution
>>> for my scenario or giving me some kind of solution to my particular
>>> error? I'll paste below the stack trace in case someone finds it useful.
>>>
>>> Thanks in advance,
>>>
>>> Sebastian Gomez
>>>
>>> [1]
>>> http://www.mail-archive.com/users@servicemix.apache.org/msg05915.html
>>>
>>>
>>> ERROR - CamelJbiComponent              - Error processing exchange InOut[
>>>  id: ID:XXX.XXX.XXX.XXX-12531fce6e9-4:14
>>>  status: Active
>>>  role: consumer
>>>  service: {http://my.namespace/}MyService<http://my.namespace/%7DMyService>
>>> <http://my.namespace/%7DMyService>
>>>  endpoint: MyEndpoint
>>>  operation: {http://my.namespace/}MyOperation<http://my.namespace/%7DMyOperation>
>>> <http://my.namespace/%7DMyOperation>
>>>
>>>  in: <?xml version="1.0" encoding="UTF-8"?><xxx/>
>>>  fault: <?xml version="1.0" encoding="UTF-8"?><JBIFault xmlns="
>>> http://java.sun.
>>> com/xml/ns/jbi/wsdl-11-wrapper"><detail xmlns="">Read timed
>>> out</detail></JBIFau
>>> lt>
>>> ]
>>> java.lang.RuntimeException: javax.jbi.messaging.MessagingException: Fault
>>> not su
>>> pported
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.jav
>>> a:179)
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchang
>>> e.java:156)
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.createFaultMessage(JbiExchang
>>> e.java:37)
>>>        at
>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:2
>>> 59)
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:81)
>>>
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:37)
>>>
>>>        at
>>> org.apache.camel.impl.DefaultExchange.getFault(DefaultExchange.java:2
>>> 54)
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:76)
>>>
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.getFault(JbiExchange.java:37)
>>>
>>>        at
>>> org.apache.servicemix.camel.CamelConsumerEndpoint.process(CamelConsum
>>> erEndpoint.java:64)
>>>        at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.doProcess(AsyncBaseLi
>>> feCycle.java:627)
>>>        at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.processExchange(Async
>>> BaseLifeCycle.java:598)
>>>        at
>>> org.apache.servicemix.common.AsyncBaseLifeCycle.onMessageExchange(Asy
>>> ncBaseLifeCycle.java:535)
>>>        at
>>> org.apache.servicemix.common.SyncLifeCycleWrapper.onMessageExchange(S
>>> yncLifeCycleWrapper.java:60)
>>>        at
>>> org.apache.servicemix.jbi.messaging.DeliveryChannelImpl.processInBoun
>>> d(DeliveryChannelImpl.java:623)
>>>        at
>>> org.apache.servicemix.jbi.nmr.flow.AbstractFlow.doRouting(AbstractFlo
>>> w.java:172)
>>>        at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaFlow.doRouting(SedaFlow.j
>>> ava:168)
>>>        at
>>> org.apache.servicemix.jbi.nmr.flow.seda.SedaQueue$1.run(SedaQueue.jav
>>> a:134)
>>>        at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExec
>>> utor.java:650)
>>>        at
>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor
>>> .java:675)
>>>        at java.lang.Thread.run(Thread.java:595)
>>> Caused by: javax.jbi.messaging.MessagingException: Fault not supported
>>>        at
>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setMessage(Me
>>> ssageExchangeImpl.java:366)
>>>        at
>>> org.apache.servicemix.jbi.messaging.MessageExchangeImpl.setFault(Mess
>>> ageExchangeImpl.java:290)
>>>        at
>>> org.apache.servicemix.camel.JbiExchange.createMessage(JbiExchange.jav
>>> a:166)
>>>        ... 20 more
>>>
>>>
>>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message