cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Sergey Beryozkin" <sbery...@progress.com>
Subject Re: JAXRS outFaultInterceptors
Date Wed, 13 May 2009 14:06:52 GMT
Hi,

What exactly is not working when registering proviers programmatically ?
Are exception mappers not invoked ?

I've added a test which tries to follow your example pretty closely :
http://svn.apache.org/repos/asf/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/JAXRSServerFactoryBeanTest.java

May be you can try to check, just for a test, a resulting ProviderFactory, same way it's done
in the test I linked to ?

Cheers, Sergey

----- Original Message ----- 
From: "Vitaly Peressada" <vperessada@liquidnet.com>
To: <users@cxf.apache.org>
Sent: Tuesday, May 12, 2009 3:33 PM
Subject: RE: JAXRS outFaultInterceptors


Hi,

One more question on configuring ExceptionMappers programmatically. Spring configuration works
as per below

<jaxrs:server id="userService" address="/user">
        <jaxrs:providers>
                <ref bean="authInterceptor"/>
                <ref bean="runtimeExceptionMapper"/>
                <ref bean="infraredExceptionMapper"/>
        </jaxrs:providers>
        <jaxrs:serviceBeans>
                <ref bean="userService"/>
        </jaxrs:serviceBeans>
</jaxrs:server>

but following doesn't

JAXRSServerFactoryBean jaxrsBean = new JAXRSServerFactoryBean();
jaxrsBean.setResourceClasses(this.getClass());
jaxrsBean.setResourceClasses(this.getClass());
jaxrsBean.setResourceProvider(this.getClass(),
    new SingletonResourceProvider(this));

InfraredExceptionMapper iem = new InfraredExceptionMapper();
RuntimeExceptionMapper rem = new RuntimeExceptionMapper();
List<Object> providers = new ArrayList<Object>();
providers.add(iem); providers.add(rem);
jaxrsBean.setProviders(providers);

this.endpointUrl = "http://"
    + InetAddress.getLocalHost().getCanonicalHostName()
    + ":"
    + String.valueOf(this.getListenPort()) + "/";

jaxrsBean.setAddress(this.endpointUrl);
server = jaxrsBean.create();
server.start()

I guess setProviders(...) registers them as entityProviders. How should I register them?

Vitaly

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozk@progress.com]
Sent: Monday, May 11, 2009 3:47 PM
To: users@cxf.apache.org
Subject: RE: JAXRS outFaultInterceptors

Hi

It's great. By the way, I think the reason you don't see custom invokers
working is that that enhancement is currently only available in
snapshots, so sorry for the confusion, I'll update the docs

Cheers, Sergey

-----Original Message-----
From: Vitaly Peressada [mailto:vperessada@liquidnet.com]
Sent: 11 May 2009 19:01
To: users@cxf.apache.org
Subject: RE: JAXRS outFaultInterceptors

Thanks for your help, ExceptionMapper does work for me.

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozk@progress.com]
Sent: Saturday, May 09, 2009 10:49 AM
To: users@cxf.apache.org
Subject: RE: JAXRS outFaultInterceptors

So why can't you use ExceptionMappers for this purpose ?
You can register as many mappers as you like. You might want to register
single RuntimeException mapper which will catch everything or you can do

ExceptionMapper<RuntimeException> & ExceptionMapper<MyAppException>,
etc...

But I will also have a look at why fault interceptors are not invoked...


> http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-Custominvokers

This has to work, I was able to hit a breakpoint in my system test...
Please try

http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apa
che/cxf/systest/jaxrs/security/JAXRSSpringSecurityInterfaceTest.java#tes
tGetBookUser, specifically

see getBook(endpointAddress, "baddy", "baddyspassword", 403);

This one works only due to

http://svn.apache.org/repos/asf/cxf/trunk/systests/src/test/java/org/apa
che/cxf/systest/jaxrs/CustomJAXRSInvoker.java

as otherwise "baddy" would've got 200 response.
You might want to try to quickly build 'mvn install -Pfastinstall' the
source, change

launchServer(BookServerSecuritySpringInterface.class));

to

launchServer(BookServerSecuritySpringInterface.class, true));

and try to hit a breakpoint...

cheers, Sergey
-----Original Message-----
From: Vitaly Peressada [mailto:vperessada@liquidnet.com]
Sent: 08 May 2009 21:50
To: users@cxf.apache.org
Subject: RE: JAXRS outFaultInterceptors

I did see ExceptionMapper but even after implementing it I would not
solve my design problem. I want to find a single central place in CXF
JAXRS stack where I can:

try {
      // invoke service
}
catch (MyAppException me) {
        ServerError se = new ServerError();
        se.setErrorCode(me.getError().ordinal());
        se.setErrorMessage(me.getError().name());
        return Response.error().entity(se).build();
}
catch (RuntimeException re) {
        ServerError se = new ServerError();
        se.setErrorCode(StatusCode.INTERNAL_SERVER_ERROR);
        se.setErrorMessage(StatusCode.INTERNAL_SERVER_ERROR.name());
        return Response.error().entity(se).build();
}

By the way, I also tried
http://cwiki.apache.org/CXF20DOC/jax-rs.html#JAX-RS-Custominvokers but
was not able to hit breakpoint on exception.

Any other ideas? If not, I guess I had to resort to Spring AOP method
interceptors...

-----Original Message-----
From: Sergey Beryozkin [mailto:sberyozk@progress.com]
Sent: Friday, May 08, 2009 4:29 PM
To: users@cxf.apache.org
Subject: RE: JAXRS outFaultInterceptors

Hi

> Try 1
> Use <jaxrs: outFaultInterceptors>
> Spring complained

I will investigate.

In meantime, you might want to implement a JAXRS
ExceptionMapper<YourException> instead and register it as a provider.

At the moment one can't register CXF interceptors as JAXRS providers,
one needs to use inInterceptors/outInterceptors instead.

Thanks, Sergey

-----Original Message-----
From: Vitaly Peressada [mailto:vperessada@liquidnet.com]
Sent: 08 May 2009 21:10
To: users@cxf.apache.org
Subject: JAXRS outFaultInterceptors

I am trying to setup a custom exception handler which would catch
exception from service methods and translate them in Response.error and
custom xml.

Try 1
Use <jaxrs: outFaultInterceptors>
Spring complained

Try2
<jaxrs:server id="infraRedAuthenticationServiceJaxrs" address="/user">
                                <jaxrs:providers>
                                                <ref
bean="authInterceptor"/>
                                                <ref
bean="exceptionInterceptor"/>
                                </jaxrs:providers>
                                <jaxrs:serviceBeans>
                                                <ref
bean="userService"/>
                                </jaxrs:serviceBeans>
                </jaxrs:server>

Where exceptionInterceptor is
public class ExceptionInterceptor extends
AbstractPhaseInterceptor<Message> {

      public ExceptionInterceptor() {
            this(Phase.MARSHAL);
      }

      public ExceptionInterceptor(String phase) {
            super(phase);
      }

      @Override
      public void handleMessage(Message message) throws Fault {
            message.toString();

      }

      @Override
      public void handleFault(Message message) {
            super.handleFault(message);
      }

}

but my break points are not hit when throwing exception from service
method
      @GET
      @Path("/generalexception")
      public Response throwUserException() throws Exception {
            throw new Exception("Foo");
      }

Vitaly









Mime
View raw message