I used the second approach you had suggested. I tried setting the content type too explictly but in vain. Btw , How do i use the request filter to solve?
Regards, Vinay Chandrasekharan On Apr 14, 2011, at 4:22 PM, Sergey Beryozkin <[email protected]> wrote: 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
