You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Charles Moulliard <ch...@gmail.com> on 2013/01/18 17:55:44 UTC

How to avoid that "" with camel cxf

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

Re: How to avoid that "" with camel cxf

Posted by Willem jiang <wi...@gmail.com>.
Hi Charles,

It was a part of camel-cxf wiki page. Please do a double check out it[1]

[1]http://camel.apache.org/cxf.html#CXF-HowtothrowaSOAPFaultfromCamel  

--  
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 Thursday, January 24, 2013 at 3:27 PM, Charles Moulliard wrote:

> Is it documented in camel-cxf wiki page ? If this is not the case can you
> please mention that info please
>  
>  
> On Tue, Jan 22, 2013 at 4:37 PM, Willem Jiang <willem.jiang@gmail.com (mailto:willem.jiang@gmail.com)>wrote:
>  
> > Hi Charles,
> > Setting the fault flag can tell camel-cxf consumer to treat the response
> > as a fault message not a normal response. In this way the CXF fault
> > interceptor chain can be used to generate the right soap fault instead of
> > trying to marshal the exception object to XML.
> >  
> > 发自我的 iPhone
> >  
> > 在 2013-1-22,下午4:28,Charles Moulliard <ch007m@gmail.com (mailto:ch007m@gmail.com)> 写道:
> >  
> > > 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.jiang@gmail.com (mailto:willem.jiang@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.jiang@gmail.com (mailto:willem.jiang@gmail.com)
> > (mailto:
> > > > willem.jiang@gmail.com (mailto:willem.jiang@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
> >  
>  
>  
>  
>  
>  
> --  
> Charles Moulliard
> Apache Committer / Sr. Enterprise Architect (RedHat)
> Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com




Re: How to avoid that "" with camel cxf

Posted by Charles Moulliard <ch...@gmail.com>.
Is it documented in camel-cxf wiki page ? If this is not the case can you
please mention that info please


On Tue, Jan 22, 2013 at 4:37 PM, Willem Jiang <wi...@gmail.com>wrote:

> Hi Charles,
> Setting the fault flag can tell camel-cxf consumer to treat the response
> as a fault message not a normal response. In this way the CXF fault
> interceptor chain can be used to generate the right soap fault instead of
> trying to marshal the exception object to XML.
>
> 发自我的 iPhone
>
> 在 2013-1-22,下午4:28,Charles Moulliard <ch...@gmail.com> 写道:
>
> > 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.jiang@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.jiang@gmail.com
> (mailto:
> >> willem.jiang@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
>



-- 
Charles Moulliard
Apache Committer / Sr. Enterprise Architect (RedHat)
Twitter : @cmoulliard | Blog : http://cmoulliard.blogspot.com

Re: How to avoid that "" with camel cxf

Posted by Willem Jiang <wi...@gmail.com>.
Hi Charles,
Setting the fault flag can tell camel-cxf consumer to treat the response as a fault message not a normal response. In this way the CXF fault interceptor chain can be used to generate the right soap fault instead of trying to marshal the exception object to XML. 

发自我的 iPhone

在 2013-1-22,下午4:28,Charles Moulliard <ch...@gmail.com> 写道:

> 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 <wi...@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.jiang@gmail.com(mailto:
>> willem.jiang@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

Re: How to avoid that "" with camel cxf

Posted by Charles Moulliard <ch...@gmail.com>.
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 <wi...@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.jiang@gmail.com(mailto:
> willem.jiang@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

Re: How to avoid that "" with camel cxf

Posted by Willem jiang <wi...@gmail.com>.
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.jiang@gmail.com (mailto:willem.jiang@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




Re: How to avoid that "" with camel cxf

Posted by Charles Moulliard <ch...@gmail.com>.
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 <wi...@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

Re: How to avoid that "" with camel cxf

Posted by Willem jiang <wi...@gmail.com>.
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