In my route, the exception is intercepted and handled parameter is true, that means that camel ErrorHandler will not retry
onException(CamelAuthorizationException.class) .log(">> User not authorized") .handled(true) .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { String user = "jim"; NotAuthorizedUserFault notAuthorizedUserFault = new NotAuthorizedUserFault(); NotAuthorizedUser notAuthorizedUser = new NotAuthorizedUser(); notAuthorizedUser.setUser(user); exchange.getOut().setBody(notAuthorizedUserFault); } }); So I don't really understand in this case the benefit to use setFault(true) On Tue, Jan 22, 2013 at 8:37 AM, Willem jiang <willem.ji...@gmail.com>wrote: > Hi Charles, > > Setting the Fault message could avoid the ErrorHandler retry action in the > camel route. > As the exception will be intercepted by the ErrorHandler by default. > Fault message means you don't want to camel error handler to kick in. > > > -- > Willem Jiang > > Red Hat, Inc. > FuseSource is now part of Red Hat > Web: http://www.fusesource.com | http://www.redhat.com > Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) > (English) > http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) > Twitter: willemjiang > Weibo: 姜宁willem > > > > > > On Tuesday, January 22, 2013 at 3:31 PM, Charles Moulliard wrote: > > > Additional question about FAULT usage > > > > Camel allows to set the property setFault(true/false) on the IN or OUT > > exchange. This mechanism (I think so) is inherited from Camel 1.x and was > > coming from JBI specification (NMR). As setFault() property is not really > > used today (as we can intercept exceptions, link them to the Exchange and > > return it to the caller = from()), what is really the benefit to use > > setFault() ? Why do we have to setFault for Camel-cxf when we generate a > > Java Exception (= object that JAXB will convert to SOAP Body = Soap Error > > Message) ? > > > > > > On Mon, Jan 21, 2013 at 4:04 PM, Willem jiang > > <willem.ji...@gmail.com(mailto: > willem.ji...@gmail.com)>wrote: > > > > > After some discussion with Charles, it turns out the fault message is > not > > > set up rightly, and we don't need to add the extra classes created to > > > extend Exceptions into the JAXB context as CXFEndpoint does as the CXF > > > fault out interceptor chain will take care of Fault message for us. > > > > > > If you want to setup an customer fault message to the camel-cxf > consumer, > > > Please take a look at example here[1]. > > > > > > [1] > > > > https://svn.apache.org/repos/asf/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfCustomizedExceptionTest.java > > > > > > -- > > > Willem Jiang > > > > > > Red Hat, Inc. > > > FuseSource is now part of Red Hat > > > Web: http://www.fusesource.com | http://www.redhat.com > > > Blog: http://willemjiang.blogspot.com ( > http://willemjiang.blogspot.com/) > > > (English) > > > http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese) > > > Twitter: willemjiang > > > Weibo: 姜宁willem > > > > > > > > > > > > > > > > > > On Saturday, January 19, 2013 at 12:55 AM, Charles Moulliard wrote: > > > > > > > Hi, > > > > > > > > My camel cxf project uses SOAP fault and Exceptions classes. They are > > > > generated by cxf 2.6.4 (camel used = 2.10.3) > > > > > > > > package com.redhat.fuse.example; > > > > > > > > import javax.xml.ws.WebFault; > > > > > > > > /** > > > > * This class was generated by Apache CXF 2.6.4 > > > > * 2013-01-18T17:50:59.270+01:00 > > > > * Generated source version: 2.6.4 > > > > */ > > > > > > > > @WebFault(name = "NoSuchCustomer", targetNamespace = " > > > > http://example.fuse.redhat.com/") > > > > public class NoSuchCustomerException extends Exception { > > > > > > > > private com.redhat.fuse.example.NoSuchCustomer noSuchCustomer; > > > > > > > > Nevertheless when the camel cxf endpoint gets the object > > > > (NoSuchCustomerException) to be transformed and next SOAP message > > > > > > > > > created, > > > > the following JAXB error is populated > > > > > > > > https://gist.github.com/6a64fffe39e63200e98a > > > > > > > > I have tried to add that in endpoint configuration but this is not > > > allowed > > > > > > > > <cxf:cxfEndpoint id="WS" > > > > address="http://0.0.0.0:9191/training/WebService" > > > > serviceClass="com.redhat.fuse.example.CustomerService"> > > > > <cxf:outInterceptors> > > > > <ref bean="loggingOutInterceptor"/> > > > > </cxf:outInterceptors> > > > > <cxf:inInterceptors> > > > > <ref bean="loggingInInterceptor"/> > > > > <ref bean="wss4jInInterceptor"/> > > > > <ref bean="authenticationInterceptor"/> > > > > </cxf:inInterceptors> > > > > <cxf:properties> > > > > <entry key="ws-security.validate.token" value="false"/> > > > > <!-- Add extra classes created to extend Exceptions --> > > > > <entry key="jaxb.additionalContextClasses"> > > > > <bean > > > > class="org.apache.cxf.systest.jaxb.util.ClassArrayFactoryBean"> > > > > <property name="classNames"> > > > > <list> > > > > > > > > <value>com.redhat.fuse.example.NotAuthorizedUserException</value> > > > > > > > > <value>com.redhat.fuse.example.NoSuchCustomerException</value> > > > > </list> > > > > </property> > > > > </bean> > > > > </entry> > > > > </cxf:properties> > > > > </cxf:cxfEndpoint> > > > > > > > > Is there a trick ? > > > > > > > > Regards, > > > > > > > > -- > > > > Charles Moulliard > > > > Apache Committer / Sr. Enterprise Architect (RedHat) > > > > Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com > > > > > > > > > > > > > -- > > Charles Moulliard > > Apache Committer / Sr. Enterprise Architect (RedHat) > > Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com > > > > -- Charles Moulliard Apache Committer / Sr. Enterprise Architect (RedHat) Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com