You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@juneau.apache.org by "Steve Haertel (JIRA)" <ji...@apache.org> on 2018/04/10 15:32:00 UTC

[jira] [Closed] (JUNEAU-80) RestCallHandlerDefault service method calls handleResponse which seems to close output stream right before it runs res.flushbuffer which throws an IO exception because the stream is closed.

     [ https://issues.apache.org/jira/browse/JUNEAU-80?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Steve Haertel closed JUNEAU-80.
-------------------------------

> RestCallHandlerDefault service method calls handleResponse which seems to close output stream right before it runs res.flushbuffer which throws an IO exception because the stream is closed.
> ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: JUNEAU-80
>                 URL: https://issues.apache.org/jira/browse/JUNEAU-80
>             Project: Juneau
>          Issue Type: Bug
>          Components: Code
>    Affects Versions: 7.0.1
>         Environment: Red Hat Enterprise Linux Workstation release 6.9 (Santiago)
> WAS Liberty 17.0.0.1, with a CorsFilter web.xml
>            Reporter: Steve Haertel
>            Priority: Major
>              Labels: DefaultHandler, newbie, rest
>             Fix For: 7.1.0
>
>         Attachments: JUNEAU-80.patch
>
>
> If I am doing something wrong, please let me know! Please bear with me. I'm not an expert.
> I am trying to upgrade some REST infrastructure to use Juneau (7.0.1) and while all REST calls return successfully, I'm always seeing stack traces.
>  
> {code:java}
> java.io.IOException: Stream is closed
> at com.ibm.ws.http.channel.internal.outbound.HttpOutputStreamImpl.validate(HttpOutputStreamImpl.java:210)
> at com.ibm.ws.http.channel.internal.outbound.HttpOutputStreamImpl.flush(HttpOutputStreamImpl.java:592)
> at com.ibm.ws.webcontainer.osgi.response.WCOutputStream.flush(WCOutputStream.java:234)
> at org.apache.juneau.rest.RestResponse.flushBuffer(RestResponse.java:461)
> at org.apache.juneau.rest.RestCallHandler.service(RestCallHandler.java:182)
> at org.apache.juneau.rest.RestCallHandler.service(RestCallHandler.java:129)
> at org.apache.juneau.rest.RestServlet.service(RestServlet.java:142)
> at javax.servlet.http.HttpServlet.service(HttpServlet.java:668){code}
>  
>  
> It looks like the default rest call handler's service method is calling res.flushbuffer() which is throwing an IO exception. For the life of me, I couldn't figure out what was closing the output stream.
>  
> {{I was wondering if maybe the default 'handleResponse' was somehow closing the response output stream so I made my own RestCallHandler with an Override'd handleResponse which does this:}}
> {code:java}
> try {
> res.flushBuffer();
> } catch (IOException e1) {
> logger.info("***IO ex flush before handle resp.");
> }
> try {
> super.handleResponse(req, res, output);
> } catch (RestException e) {
> logger.info("***REST ex from handle resp.");
> } catch (IOException e) {
> logger.info("***IO ex from handle resp.");
> }
> try {
> res.flushBuffer();
> } catch (IOException e1) {
> logger.info("***IO ex flush after handle resp.");
> }
> {code}
>  
> and sure enough, I got "***IO ex flush *after* handle resp." in my log.
>  
> It seems that handleResponse is closing the response output stream. I did a little bit more looking, and I see that DefaultHandler has a 'os.close()' in it.
>  
> Is this the culprit of my issue? (Or am I going about this wrong).



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)