Details
-
Bug
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
2.7.18, 3.0.7, 3.1.4
-
IBM Liberty Profile with CXF and JavaMelody, but this is mostly a discussion about Servlet/Flushable-spec and flush after close.
-
Unknown
Description
ServletResponse.flushBuffer: http://grepcode.com/file/repo1.maven.org/maven2/javax.servlet/javax.servlet-api/3.1.0/javax/servlet/ServletResponse.java#ServletResponse.flushBuffer%28%29
Reading the javadoc of ServletResponse.flushBuffer, Closable and Flushable interfaces tells me that calling flushBuffer on a ServletResponse containing a closed stream could give an IOException.
We have had problems with this in Liberty Profile, while using CXF together with CXF.
Background story:
1) Javamelody issue: https://github.com/javamelody/javamelody/issues/411
2) Old discussion: https://groups.google.com/forum/#!topic/javamelody/kX31sRTFrHE/discussion
3) IBM WasDev issue: https://developer.ibm.com/answers/questions/244982/why-does-httpoutputstreamflush-when-stream-is-clos/
To make a short recap:
1) Soap-call to the service
2) Cxf calls close() -> OutputStream closes
3) Cxf calls flushBuffer which hits JavaMelody's ServletResponse-wrapper which again calls flush on the OutputStream
4) Ibm Liberty Profile throws an IOException telling the stream is closed.
If we exclude JavaMelody:
3) Cxf calls flushBuffer which hits Liberty Profile's ServletResponse-wrapper which checks if the stream is already close and returns early.
Update: Added crossreference to the IBM WasDev issue from the wrong one: https://developer.ibm.com/answers/questions/244982/why-does-httpoutputstreamflush-when-stream-is-clos/