cxf-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sergey Beryozkin <sberyoz...@gmail.com>
Subject Re: Error handling in out interceptor in jaxrs
Date Mon, 16 May 2016 08:26:57 GMT
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 <riceyeh@gmail.com> 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 <ashakirin@talend.com>
>> 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:riceyeh@gmail.com]
>>>> Sent: Samstag, 14. Mai 2016 09:48
>>>> To: users@cxf.apache.org
>>>> 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/

Mime
View raw message