Finally I achieve something :)

Here is my ErrorProcessor :

*public final class ErrorProcessor implements Processor {

    private static final Logger logger =
Logger.getLogger(ErrorProcessor.class);

    public void process(Exchange exchange) throws Exception {
        logger.info("Trying to find an exception in property:
"+DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY);
        Throwable exception = (Throwable)
exchange.getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY);
        if (exception != null) {
            exchange.setException(exception);
        } else {
            logger.info("Trying to find an exception using:
DeadLetterChannel.restoreExceptionOnExchange()");
            DeadLetterChannel.restoreExceptionOnExchange(exchange);
        }
        exception = exchange.getException();
        if (exception != null && exchange instanceof JbiExchange) {
            logger.info("Setting JbiExchange status to Error");
            MessageExchangeImpl messageExchange = (MessageExchangeImpl)
((JbiExchange) exchange).getMessageExchange();
            messageExchange.setStatus(ExchangeStatus.ERROR);
            if (exception instanceof Exception) {
                messageExchange.setError((Exception)exception);
            } else {
                messageExchange.setError(new Exception(exception));
            }
        }
        logger.info("Exchange exception is "+exception);
        logger.info("Exchange.isFailed()="+exchange.isFailed());
    }
}*

When I detect an exception in CamelExchange, I grab the original ServiceMix
MessageExchange
and add the error and set the correct status.

Now the ServiceMix exchange ends correctly :
*10:55:55,496 | DEBUG | pool-flow.seda.servicemix-camel-thread-2 |
SedaQueue                | .jbi.nmr.flow.seda.SedaQueue$1  132 |
[EMAIL PROTECTED] dequeued
exchange: InOut[
  id: ID:10.133.251.75-11b49f9ce1e-2:0
  status: Error
  role: consumer
  service: {http://hello.samples.sofinco.com}HelloServiceRoute
  endpoint: camel10-133-251-75-11b49f9ce1e-5-0
  operation: {http://hello.samples.sofinco.com}sayHello
  in: <?xml version="1.0" encoding="UTF-8"?><jbi:message xmlns:jbi="
http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"; xmlns:msg="
http://hello.samples.sofinco.com"; name="sayHello" type="msg:sayHello"
version="1.0"><jbi:part><ns2:sayHello xmlns:ns2="
http://hello.samples.sofinco.com
"><arg0>Manuel</arg0></ns2:sayHello></jbi:part></jbi:message>
  error: com.ctc.wstx.exc.WstxIOException: Connection refused: connect
]
*
And my webservice client receives a soapfault (not with the original stack
trace but it is something) :

*org.apache.cxf.binding.soap.SoapFault: Connection refused: connect
    at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:70)
    at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
    at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:96)
    at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:65)
    at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
    at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:449)
    at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:1996)
    at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1832)
    at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:591)
    at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
    at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:221)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:296)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:242)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:73)
    at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:178)
    at $Proxy40.sayHello(Unknown Source)
    at
com.sofinco.samples.hello.HelloServiceClientTest.callService(HelloServiceClientTest.java:59)
    at
com.sofinco.samples.hello.HelloServiceClientTest.testSayHelloESB(HelloServiceClientTest.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59)
    at
org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98)
    at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79)
    at
org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodRoadie.java:87)
    at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77)
    at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42)
    at
org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRunner.java:88)
    at
org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:51)
    at
org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44)
    at
org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27)
    at
org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37)
    at
org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42)
    at
org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
    at
org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
    at
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
*
Thanks everyone !
Manuel
PS: Here is the JIRA issue for this :
https://issues.apache.org/activemq/browse/SM-1473

On Tue, Jul 22, 2008 at 10:59 AM, Manuel EVENO <[EMAIL PROTECTED]>
wrote:

>
> When looking at the 
> CamelJbiEnpoint<http://svn.apache.org/repos/asf/servicemix/components/engines/servicemix-camel/trunk/src/main/java/org/apache/servicemix/camel/CamelJbiEndpoint.java>class
>  it seems that effectively camel does not look at exchange status
> in method "handleActiveProviderExchange()". It simply send message to camel
> processor and send the message back to NMR.
>
> FYI I'm using servicemix-camel-3.2.2-SNAPSHOT and camel-core 1.4-SNAPSHOT
>
>
> On Tue, Jul 22, 2008 at 10:42 AM, Gert Vanthienen <
> [EMAIL PROTECTED]> wrote:
>
>> Manuel,
>>
>> If this is the MessageExchange coming back from the Camel endpoint after
>> you have explicitly thrown an exception to force the error, I would suggest
>> you raise a JIRA for this.  Looks like the Camel component doesn't forward
>> the Fault message then.
>>
>>
>> Regards,
>>
>> Gert
>>
>> Manuel EVENO wrote:
>>
>>> I've already set the log4j debug level for servicemix and the log file
>>> attached in my previous mail show
>>> the message echange info. Here it is :
>>>
>>> *12:34:37,412 | DEBUG | pool-flow.seda.servicemix-camel-thread-3 |
>>> SedaQueue                | .jbi.nmr.flow.seda.SedaQueue$1  132 |
>>> [EMAIL PROTECTED] dequeued
>>> exchange: InOut[
>>>  id: ID:10.133.251.75-11b452c884b-3:0
>>>  status: Done
>>>  role: provider
>>>  service: {http://hello.samples.sofinco.com}HelloServiceRoute
>>>  endpoint: camel10-133-251-75-11b452c884b-5-0
>>>  operation: {http://hello.samples.sofinco.com}sayHello
>>>  in: <?xml version="1.0" encoding="UTF-8"?><jbi:message xmlns:jbi="
>>> http://java.sun.com/xml/ns/jbi/wsdl-11-wrapper"; xmlns:msg="
>>> http://hello.samples.sofinco.com"; name="sayHello" type="msg:sayHello"
>>> version="1.0"><jbi:part><ns1:sayHello xmlns:ns1="
>>> http://hello.samples.sofinco.com";><arg0 xmlns:ns2="
>>> http://hello.samples.sofinco.com
>>> ">Manuel</arg0></ns1:sayHello></jbi:part></jbi:message>
>>> ]*
>>>
>>> Status = Done and no out or fault message :(
>>>
>>>
>>> On Tue, Jul 22, 2008 at 10:14 AM, Gert Vanthienen <
>>> [EMAIL PROTECTED]>
>>> wrote:
>>>
>>>
>>>
>>>> Manuel,
>>>>
>>>> Could you set DEBUG logging in ServiceMix, so you could take a look at
>>>> the
>>>> message exchanges that go through the ESB?  Especially, what does the
>>>> MessageExchange that goes back to your CXF BC endpoint look like?  Does
>>>> it
>>>> have a DONE or ERROR status?
>>>>
>>>> Gert
>>>>
>>>>
>>>> Manuel EVENO wrote:
>>>>
>>>>
>>>>
>>>>> I'm stuck with that.
>>>>>
>>>>> Anyone with any clue ? ;)
>>>>>
>>>>>
>>>>> On Mon, Jul 21, 2008 at 2:06 PM, Manuel EVENO <[EMAIL PROTECTED]>
>>>>> wrote:
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>> Maybe, I've done something wrong but now I don't have any response on
>>>>>> error.
>>>>>> Here is the log for the client (using CXF), the response payload is
>>>>>> empty
>>>>>> and there's no soap fault.
>>>>>>
>>>>>> *INFO: Outbound Message
>>>>>> ---------------------------
>>>>>> Encoding: UTF-8
>>>>>> Headers: {SOAPAction=[""], Accept=[*]}
>>>>>> Messages:
>>>>>> Payload: <soap:Envelope xmlns:soap="
>>>>>> http://schemas.xmlsoap.org/soap/envelope/";><**soap:Body><ns1:sayHello
>>>>>> xmlns:ns1="http://hello.samples.sofinco.com";><arg0 xmlns:ns2="
>>>>>> http://hello.samples.sofinco.com
>>>>>> ">Manuel</**arg0></ns1:sayHello></soap:**
>>>>>> Body></soap:Envelope>
>>>>>> ------------------------------**--------
>>>>>> 21 juil. 2008 11:22:51
>>>>>> org.apache.cxf.interceptor.**LoggingInInterceptor
>>>>>> logging
>>>>>> INFO: Inbound Message
>>>>>> ----------------------------
>>>>>> Encoding: UTF-8
>>>>>> Headers: {transfer-encoding=[chunked], Server=[Jetty(6.1.5)]}
>>>>>> Messages:
>>>>>> Message:
>>>>>>
>>>>>> Payload:
>>>>>> ------------------------------**--------
>>>>>> 21 juil. 2008 11:22:51 org.apache.cxf.phase.**PhaseInterceptorChain
>>>>>> doIntercept
>>>>>> INFO: Interceptor has thrown exception, unwinding now
>>>>>> org.apache.cxf.binding.soap.**SoapFault: Error reading
>>>>>> XMLStreamReader.
>>>>>>   at
>>>>>> org.apache.cxf.binding.soap.**interceptor.**ReadHeadersInterceptor.
>>>>>> **handleMessage(**ReadHeadersInterceptor.java:**183)
>>>>>>   at
>>>>>> org.apache.cxf.binding.soap.**interceptor.**ReadHeadersInterceptor.
>>>>>> **handleMessage(**ReadHeadersInterceptor.java:**54)
>>>>>>   at org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>>>>>> PhaseInterceptorChain.java:**221)
>>>>>>   at org.apache.cxf.endpoint.**ClientImpl.onMessage(**
>>>>>> ClientImpl.java:449)
>>>>>>   at
>>>>>> org.apache.cxf.transport.http.**HTTPConduit$**WrappedOutputStream.*
>>>>>> *handleResponse(HTTPConduit.**java:1996)
>>>>>>   at org.apache.cxf.transport.http.**HTTPConduit$**
>>>>>> WrappedOutputStream.close(**HTTPConduit.java:1832)
>>>>>>   at org.apache.cxf.io.**CacheAndWriteOutputStream.**postClose(**
>>>>>> CacheAndWriteOutputStream.**java:47)
>>>>>>   at org.apache.cxf.io.**CachedOutputStream.close(**
>>>>>> CachedOutputStream.java:159)
>>>>>>   at org.apache.cxf.transport.**AbstractConduit.close(**
>>>>>> AbstractConduit.java:66)
>>>>>>   at org.apache.cxf.transport.http.**HTTPConduit.close(HTTPConduit.**
>>>>>> java:591)
>>>>>>   at org.apache.cxf.interceptor.**MessageSenderInterceptor$**
>>>>>> MessageSenderEndingInterceptor**.handleMessage(**
>>>>>> MessageSenderInterceptor.java:**62)
>>>>>>   at org.apache.cxf.phase.**PhaseInterceptorChain.**doIntercept(**
>>>>>> PhaseInterceptorChain.java:**221)
>>>>>>   at
>>>>>> org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:296)
>>>>>>   at
>>>>>> org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:242)
>>>>>>   at
>>>>>> org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:200)
>>>>>>   at
>>>>>> org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:220)
>>>>>>   at
>>>>>> org.apache.cxf.endpoint.**ClientImpl.invoke(ClientImpl.**java:206)
>>>>>>   at com.sofinco.samples.hello.**HelloServiceClient.sayHello(**
>>>>>> HelloServiceClient.java:29)
>>>>>>   at com.sofinco.samples.hello.**HelloServiceClientTest.**
>>>>>> testSayHelloESBWithJaxWsProxy(**HelloServiceClientTest.java:**29)
>>>>>>   at sun.reflect.**NativeMethodAccessorImpl.**invoke0(Native Method)
>>>>>>   at sun.reflect.**NativeMethodAccessorImpl.**invoke(**
>>>>>> NativeMethodAccessorImpl.java:**39)
>>>>>>   at sun.reflect.**DelegatingMethodAccessorImpl.**invoke(**
>>>>>> DelegatingMethodAccessorImpl.**java:25)
>>>>>>   at java.lang.reflect.Method.**invoke(Method.java:597)
>>>>>>   at org.junit.internal.runners.**TestMethod.invoke(TestMethod.**
>>>>>> java:59)
>>>>>>   at org.junit.internal.runners.**MethodRoadie.runTestMethod(**
>>>>>> MethodRoadie.java:98)
>>>>>>   at org.junit.internal.runners.**MethodRoadie$2.run(**
>>>>>> MethodRoadie.java:79)
>>>>>>   at org.junit.internal.runners.**MethodRoadie.**
>>>>>> runBeforesThenTestThenAfters(**MethodRoadie.java:87)
>>>>>>   at org.junit.internal.runners.**MethodRoadie.runTest(**
>>>>>> MethodRoadie.java:77)
>>>>>>   at org.junit.internal.runners.**MethodRoadie.run(MethodRoadie.**
>>>>>> java:42)
>>>>>>   at
>>>>>> org.junit.internal.runners.**JUnit4ClassRunner.**invokeTestMethod(*
>>>>>> *JUnit4ClassRunner.java:88)
>>>>>>   at org.junit.internal.runners.**JUnit4ClassRunner.runMethods(**
>>>>>> JUnit4ClassRunner.java:51)
>>>>>>   at org.junit.internal.runners.**JUnit4ClassRunner$1.run(**
>>>>>> JUnit4ClassRunner.java:44)
>>>>>>   at org.junit.internal.runners.**ClassRoadie.runUnprotected(**
>>>>>> ClassRoadie.java:27)
>>>>>>   at org.junit.internal.runners.**ClassRoadie.runProtected(**
>>>>>> ClassRoadie.java:37)
>>>>>>   at org.junit.internal.runners.**JUnit4ClassRunner.run(**
>>>>>> JUnit4ClassRunner.java:42)
>>>>>>   at
>>>>>> org.eclipse.jdt.internal.**junit4.runner.**JUnit4TestReference.run(
>>>>>> **JUnit4TestReference.java:45)
>>>>>>   at org.eclipse.jdt.internal.**junit.runner.TestExecution.**
>>>>>> run(TestExecution.java:38)
>>>>>>   at org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
>>>>>> runTests(RemoteTestRunner.**java:460)
>>>>>>   at org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
>>>>>> runTests(RemoteTestRunner.**java:673)
>>>>>>   at org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
>>>>>> run(RemoteTestRunner.java:386)
>>>>>>   at org.eclipse.jdt.internal.**junit.runner.RemoteTestRunner.**
>>>>>> main(RemoteTestRunner.java:**196)
>>>>>> Caused by: com.ctc.wstx.exc.**WstxEOFException: Unexpected EOF in
>>>>>> prolog
>>>>>>  at [row,col {unknown-source}]: [1,0]
>>>>>>   at com.ctc.wstx.sr.StreamScanner.**throwUnexpectedEOF(**
>>>>>> StreamScanner.java:661)
>>>>>>   at com.ctc.wstx.sr.**BasicStreamReader.handleEOF(**
>>>>>> BasicStreamReader.java:2134)
>>>>>>   at com.ctc.wstx.sr.**BasicStreamReader.**nextFromProlog(**
>>>>>> BasicStreamReader.java:2040)
>>>>>>   at com.ctc.wstx.sr.**BasicStreamReader.next(**
>>>>>> BasicStreamReader.java:1069)
>>>>>>   at com.ctc.wstx.sr.**BasicStreamReader.nextTag(**
>>>>>> BasicStreamReader.java:1095)
>>>>>>   at
>>>>>> org.apache.cxf.binding.soap.**interceptor.**ReadHeadersInterceptor.
>>>>>> **handleMessage(**ReadHeadersInterceptor.java:**83)
>>>>>>   ... 40 more
>>>>>> *
>>>>>> I found a log entry telling Camel called my processor but it seems to
>>>>>> do
>>>>>> nothing :
>>>>>>
>>>>>> *11:40:53,280 | ERROR | pool-flow.seda.servicemix-camel-thread-3 |
>>>>>> DeadLetterChannel        | .apache.camel.processor.Logger  152 |
>>>>>> Failed
>>>>>> delivery for exchangeId: ID-PSP0020/4119-1216629810312/0-8. Handled by
>>>>>> the
>>>>>> failure processor: [EMAIL PROTECTED]
>>>>>> *
>>>>>> Here is the camel config (Java) :
>>>>>>
>>>>>> *        DeadLetterChannelBuilder deadLetterChannel =
>>>>>> deadLetterChannel();
>>>>>>       deadLetterChannel.setRedeliveryPolicy(redeliveryPolicy);
>>>>>>       deadLetterChannel.setDefaultDeadLetterEndpoint(new
>>>>>> ErrorProcessor());
>>>>>>       errorHandler(deadLetterChannel);
>>>>>> *
>>>>>> And the ErrorProcessor class :
>>>>>>
>>>>>> *public final class ErrorProcessor implements Processor {
>>>>>>   public void process(Exchange exchange) throws Exception {
>>>>>>       throw new CamelExchangeException("Message redelivery failed",
>>>>>> exchange);
>>>>>>   }
>>>>>> }
>>>>>> *
>>>>>>
>>>>>> I've also tried another ErrorProcessor :
>>>>>>
>>>>>> *public final class ErrorProcessor implements Processor {
>>>>>>   private static final Logger logger =
>>>>>> Logger.getLogger(ErrorProcessor.class);
>>>>>>   public void process(Exchange exchange) throws Exception {
>>>>>>       Throwable exception = (Throwable)
>>>>>> exchange.getProperty(DeadLetterChannel.EXCEPTION_CAUSE_PROPERTY);
>>>>>>       if (exception != null) {
>>>>>>           exchange.setException(exception);
>>>>>>       } else {
>>>>>>           DeadLetterChannel.restoreExceptionOnExchange(exchange);
>>>>>>       }
>>>>>>       if (exchange.getException() == null) {
>>>>>>           exchange.getFault(true).setBody(new
>>>>>> CamelExchangeException("Message redelivery failed", exchange));
>>>>>>       }
>>>>>>       logger.info("Setting exchange exception to
>>>>>> "+exchange.getException());
>>>>>>       logger.info("Exchange.isFailed()="+exchange.isFailed());
>>>>>>   }
>>>>>> }
>>>>>> *
>>>>>>
>>>>>> Which imply the same behavior ...
>>>>>>
>>>>>> (See the complete servicemix log file attached)
>>>>>>
>>>>>> Any clue ?
>>>>>> Manuel
>>>>>>
>>>>>>
>>>>>> On Mon, Jul 21, 2008 at 10:37 AM, Gert Vanthienen <
>>>>>> [EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>> Manuel,
>>>>>>>
>>>>>>> The trick with the Processor should work as well.  Are you
>>>>>>> experiencing
>>>>>>> any
>>>>>>> problems with it?
>>>>>>>
>>>>>>> Gert
>>>>>>>
>>>>>>>
>>>>>>> Manuel EVENO wrote:
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> Thanks Gert for these information !
>>>>>>>>
>>>>>>>> I foudn the way to configure the deadLetterChannel Behavior but I
>>>>>>>> stil
>>>>>>>> can't
>>>>>>>> configure the final exception behavior.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> If you want the DeadLetterChannel handling to fail (instead of log)
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> after
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> the redelivery attempts, you can end the deadLetterChannel()
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> clause in your RouteBuilder with .throwFault() to force the
>>>>>>>>> exception.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> The .throwFault() method seems to be part of the ProcessorType
>>>>>>>>> class
>>>>>>>>>
>>>>>>>>>
>>>>>>>> but
>>>>>>>> the
>>>>>>>> ErrorHandlerBuilderSupport (and DeadLetterChannelBuilder) class
>>>>>>>> doesn't
>>>>>>>> have
>>>>>>>> such method.
>>>>>>>> Guided by your hint (specially reading your sentence "instead of
>>>>>>>> log"),
>>>>>>>> I've
>>>>>>>> looked for the log step and found the defaultDeadLetterEndpointUri
>>>>>>>> which
>>>>>>>> points to log:org.apache.camel.DeadLetterChannel?level=error";
>>>>>>>>
>>>>>>>> So if I change the default dead letter endpoint to the following,
>>>>>>>> does
>>>>>>>> this
>>>>>>>> make the exception trick ?
>>>>>>>>
>>>>>>>>       deadLetterChannel.setDefaultDeadLetterEndpoint(new Processor()
>>>>>>>> {
>>>>>>>>           public void process(Exchange exchange) throws Exception {
>>>>>>>>               throw new CamelExchangeException("All message
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> redeliveries
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> failed", exchange);
>>>>>>>>           }
>>>>>>>>       });
>>>>>>>>
>>>>>>>> Manuel
>>>>>>>>
>>>>>>>> On Mon, Jul 21, 2008 at 7:57 AM, Gert Vanthienen
>>>>>>>> <[EMAIL PROTECTED]>
>>>>>>>> wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>> Manuel,
>>>>>>>>>
>>>>>>>>> If you do not configure any specific ErrorHandler in your Camel
>>>>>>>>> RouteBuilder, Camel will default to using a DeadLetterChannel
>>>>>>>>> handler
>>>>>>>>> with
>>>>>>>>> 5? re-delivery attempts and logging an error after these delivery
>>>>>>>>> attempts.
>>>>>>>>>  From a JBI perspective, by logging the error message, it has been
>>>>>>>>> handled
>>>>>>>>> and that's why you are getting the DONE status back.  We're looking
>>>>>>>>> to
>>>>>>>>> changing this default behavior for a next release of Camel.
>>>>>>>>>
>>>>>>>>> For now, you can configure a more appropriate ErrorHandler
>>>>>>>>> yourself.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>  If
>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> you want no error handling by Camel at all, you can use
>>>>>>>>
>>>>>>>>
>>>>>>>>> errorHandler(noErrorHandler()) at the top of your RouteBuilder to
>>>>>>>>> get
>>>>>>>>> this
>>>>>>>>> done.  This page (
>>>>>>>>> http://activemq.apache.org/camel/error-handler.html
>>>>>>>>> )
>>>>>>>>> shows you a bit more information about configuring Camel error
>>>>>>>>> handler
>>>>>>>>> strategies.  You can also find examples on how to configure the
>>>>>>>>> deadletterchannel.  If you want the DeadLetterChannel handling to
>>>>>>>>> fail
>>>>>>>>> (instead of log) after the redelivery attempts, you can end the
>>>>>>>>> deadLetterChannel() clause in your RouteBuilder with .throwFault()
>>>>>>>>> to
>>>>>>>>> force
>>>>>>>>> the exception.
>>>>>>>>>
>>>>>>>>> Regards,
>>>>>>>>>
>>>>>>>>> Gert
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> Manuel EVENO wrote:
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> Hi,
>>>>>>>>>>
>>>>>>>>>> I've got a mediation with cxf-bc:consumer -> camel (
>>>>>>>>>> cxf-bc:provider
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>> ->
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>>> saxon:xquery )
>>>>>>>>
>>>>>>>>
>>>>>>>>> Here is the camel route :
>>>>>>>>>>      from("jbi:service:
>>>>>>>>>> http://hello.samples.sofinco.com/HelloServiceRoute";)
>>>>>>>>>>          .to("jbi:endpoint:
>>>>>>>>>> http://hello.samples.sofinco.com/HelloService/HelloService";)
>>>>>>>>>>          .to("jbi:endpoint:
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>> http://hello.samples.sofinco.com/HelloServiceTransform/HelloServiceTransform
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>> ");
>>>>>>>>
>>>>>>>>
>>>>>>>>> When the called service (the one used by cxf-bc:provider) is
>>>>>>>>>> unreachable,
>>>>>>>>>> no exception is returned to the calling client (the one calling
>>>>>>>>>> the
>>>>>>>>>> ESB).
>>>>>>>>>> The client failed either on a timeout (if the redelivery process
>>>>>>>>>> takes
>>>>>>>>>> long time) or by receiving a wrong ouput message (the input
>>>>>>>>>> message)
>>>>>>>>>> Why doesn't the default behavior simply send an error ?
>>>>>>>>>>
>>>>>>>>>> More strange, the message exchange finished on a 'done' status
>>>>>>>>>> instead
>>>>>>>>>> of
>>>>>>>>>> a 'error' status ...
>>>>>>>>>>
>>>>>>>>>> How to configure servicemix (or camel) to send an error back to
>>>>>>>>>> the
>>>>>>>>>> client
>>>>>>>>>> when an error occurs in a message exchange
>>>>>>>>>> and after the redelivery attempts all failed ?
>>>>>>>>>>
>>>>>>>>>> Manuel
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>> -----
>>>>>>> ---
>>>>>>> Gert Vanthienen
>>>>>>> http://www.anova.be
>>>>>>> --
>>>>>>> View this message in context:
>>>>>>>
>>>>>>>
>>>>>>> http://www.nabble.com/Understanding-the-default-behavior-on-exception-tp18530599p18564323.html
>>>>>>> Sent from the ServiceMix - User mailing list archive at Nabble.com.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>
>>>
>>>
>>
>>
>

Reply via email to