Hi Sergey, "the exceptions thrown from either in or out chains are expected to be caught by the registered mappers". I tried it, cxf's jaxrs does not follows what you said.
Rice On Mon, May 16, 2016 at 4:26 PM, Sergey Beryozkin <[email protected]> wrote: > Hi Rice > > After JAXRSOutIterceptor has finished its work, the response has already > been written out, so I guess trying to do some extra response work after > that can not work, may be I'm missing something ? > > FYI, the exceptions thrown from either in or out chains are expected to be > caught by the registered mappers, the exceptions escaped from in/out chains > will still be tried in the default JAX-RS out fault interceptor. > > Cheers, Sergey > > On 16/05/16 05:58, Rice Yeh wrote: > >> In cxf jaxrs implementation, javax.ws.rs.ex.ExceptionMapper can work >> because JAXRSInInterceptor.handleFault(...) will invokde it. >> But JAXRSOutInterceptor.handleFault(...) does not do as much as >> JASRSInInterceptor does. That is ExceptionMapper only works during IN >> interceptor chain. My exception happens during OUT interceptor chain, That >> is, I need to to use serlvlet api to consturct my response. >> >> Rice >> >> On Mon, May 16, 2016 at 11:16 AM, Rice Yeh <[email protected]> wrote: >> >> Hi, >>> I do release my resources in a interceptor. Just when error happens >>> when >>> releasing resources in my intereceptor, I like to construct my response. >>> But since the intereceptor is after jaxrs, I cannot access jaxrs api but >>> servlet api. So I construct my response with HttpServletResponse >>> directly. >>> How do I construct my response in a more cxf-friendly way? >>> I try to use message.setContent(Response.class, ...) but it does not >>> work. >>> >>> On Sun, May 15, 2016 at 10:13 PM, Andrei Shakirin <[email protected]> >>> wrote: >>> >>> Hi Rice, >>>> >>>> The error said that you try to use Jetty Response in Writer mode >>>> (getWriter()), although it was originally opened in stream mode >>>> (getOutputStream()). >>>> Generally I am not sure that setting headers and content directly in >>>> Response is a good idea - this makes your code fragile and dependent on >>>> internal CXF implementation. >>>> >>>> Why don't release your resources in JX-RS Filter ( >>>> http://cxf.apache.org/docs/jax-rs-filters.html) or Interceptor ( >>>> http://cxf.apache.org/docs/jax-rs-basics.html#JAX-RSBasics-Interceptors >>>> )? >>>> >>>> Regards, >>>> Andrei. >>>> >>>> -----Original Message----- >>>>> From: Rice Yeh [mailto:[email protected]] >>>>> Sent: Samstag, 14. Mai 2016 09:48 >>>>> To: [email protected] >>>>> Subject: Error handling in out interceptor in jaxrs >>>>> >>>>> Hi, >>>>> I write a outward interceptor and put it after JAXRSOutInterceptor >>>>> to >>>>> >>>> clean >>>> >>>>> up some resouces. When cleaning up the resources, there might be some >>>>> exceptions happening. Then I directly set the HttpServletResponse's >>>>> >>>> headers >>>> >>>>> and content to send back an appropriate response. This works even there >>>>> >>>> is >>>> >>>>> a IllegalStateException thrown when later cxf's jaxrs implementation >>>>> >>>> try flush >>>> >>>>> http headers to the HttpServletResponse like below. Any more >>>>> appropriate >>>>> way to achieve my goal without this exception? >>>>> >>>>> 2016-05-13T16:58:36.514 [qtp1980982961-89] WARN >>>>> o.a.cxf.phase.PhaseInterceptorChain - Interceptor for { >>>>> http://rs.security.xs/}Resource has thrown exception, unwinding now >>>>> >>>>> java.lang.IllegalStateException: WRITER >>>>> >>>>> at org.eclipse.jetty.server.Response.getOutputStream(Response.java:906) >>>>> ~[na:na] >>>>> >>>>> at >>>>> >>>>> >>>> org.apache.cxf.transport.http.AbstractHTTPDestination.flushHeaders(Abstra >>>> >>>>> ctHTTPDestination.java:585) >>>>> [cxf-rt-transports-http-2.7.11.jar:2.7.11] >>>>> >>>>> at >>>>> org.apache.cxf.transport.http.AbstractHTTPDestination$WrappedOutputStre >>>>> am.close(AbstractHTTPDestination.java:743) >>>>> ~[cxf-rt-transports-http-2.7.11.jar:2.7.11] >>>>> >>>> >>>> >>> >>> >> > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ >
