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:[email protected]]
Sent: Friday, May 08, 2009 4:29 PM
To: [email protected]
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:[email protected]]
Sent: 08 May 2009 21:10
To: [email protected]
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