it does not look like you set the content type there, by the way can you use
RequestHandler filter instead ?

Cheers, Sergey

On Thu, Apr 14, 2011 at 5:06 PM, Vinay Chandrasekharan
<[email protected]>wrote:

> Thanks Sergey.
> It worked like a charm for application/json content-types but its
> return 304 with no payload (obviously) for text/xml content types.
> Can you throw light as to what might be going on here?
> Here is the snippet based on what you had suggested.
>
>
> =========
> /**
>  * REST fault out interceptor that can send exceptions raised by the
>  * interceptor, if any, according to the Accept header set by the client(s)
>  *
>  * @author vinay
>  *
>  */
> public class RestFaultOutInterceptor extends JAXRSOutInterceptor {
>        private static final Logger LOG = LoggerFactory
>                        .getLogger(RestFaultOutInterceptor.class);
>
>        public RestFaultOutInterceptor() {
>                getBefore().add(LoggingOutInterceptor.class.getName());
>        }
>
>        public void handleMessage(Message message) {
>                Exception ex = message.getContent(Exception.class);
>                LOG.info("Got exception " + ex);
>                if (ex == null) {
>                        throw new RuntimeException("Exception is expected");
>                }
>                if (!(ex instanceof Fault)) {
>                        throw new RuntimeException("Fault is expected");
>                }
>                Exception cause = (Exception) ex.getCause();
>                Response response = JAXRSUtils.convertFaultToResponse(cause,
> message
>                                .getExchange().getInMessage());
>                message.setContent(List.class, new
> MessageContentsList(response));
>                super.handleMessage(message);
>                message.getInterceptorChain().abort();
>        }
> }
> ===============
>
> Regards,
> Vinay
>
> On Wed, Apr 13, 2011 at 10:58 AM, Sergey Beryozkin <[email protected]>
> wrote:
> > Hi
> >
> > On Wed, Apr 13, 2011 at 3:20 PM, vinayc <[email protected]> wrote:
> >>
> >> Hi,
> >>  I am using CXF 2.3.3, and I have a custom cxf "in" interceptor attached
> >> to
> >> a REST service.
> >> When this interceptor throws an exception, xmlfaultoutinterceptor is
> >> called.
> >>
> > Yes, that will happen if the exception is thrown from a CXF interceptor,
> > outside of the JAX-RS scope...
> >
> >>
> >> Is there an existing cxf fault out interceptor that can format the
> message
> >> based on  the "Accept:" header set by the client since right now even if
> >> the
> >> caller is setting "application/json" type, it still returns an
> "text/xml"
> >> content back (since its XmlFaultOutIntereceptor that sends the fault
> >> back)?
> >>
> >
> > Can you try the following:
> > - add a custom out fault interceptor which will delegate internally to an
> > instance of JAXRSOutInterceptor.handleMessage() and abort the current out
> > fault chain afterwards ? Before delegating, it should probably do the
> > following:
> >
> > 1. Get the Exception from the message:
> > Exception ex = ((Fault)message.getContent(Exception.class)).getCause();
> >
> > 2. Next you need to wrap it in JAX-RS Response
> >
> > You can do it manually:
> >
> > Response r =
> >
> Response.status(status).type("application/json").entity(exceptionObject).build();
> >
> >
> > or if you have ExceptionMappers then you can use this call:
> >
> > Response r = JAXRSUtils.convertFaultToResponse(ex,
> > message.getExchange().getInMessage());
> >
> > 3. Set Response on the message:
> >
> > message.setContent(List.class, new MessageContentList(r));
> >
> > 4. new JAXRSOutInterceptor.handleMessage(message);
> > 5. message.getInterceptorChain().abort();
> >
> > that may work
> > Cheers, Sergey
> >
> >>
> >> Thanks
> >>
> >> Regards,
> >> Vinay
> >>
> >> --
> >> View this message in context:
> >>
> http://cxf.547215.n5.nabble.com/Handling-exceptions-thrown-by-interceptors-for-rest-calls-tp4300713p4300713.html
> >> Sent from the cxf-user mailing list archive at Nabble.com.
> >
> >
>
>
>
> --
> Warm regards,
> Vinay Chandrasekharan
>



-- 
Sergey Beryozkin

Application Integration Division of Talend <http://www.talend.com>
http://sberyozkin.blogspot.com

Reply via email to