[
https://issues.apache.org/jira/browse/CXF-6427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Beryozkin resolved CXF-6427.
-----------------------------------
Resolution: Fixed
Fix Version/s: Invalid
Assignee: Sergey Beryozkin
Auto-closing by default has proven to be problematic, typical example is
returning a DOM Document or StreamSource with the lazy loading done internally.
If the client requests InputStream directly then it is the responsibility of
the client to close it
> Incorrect Response InputStream closing in AbstractClient
> --------------------------------------------------------
>
> Key: CXF-6427
> URL: https://issues.apache.org/jira/browse/CXF-6427
> Project: CXF
> Issue Type: Bug
> Affects Versions: 2.7.16
> Reporter: Petr Miko
> Assignee: Sergey Beryozkin
> Fix For: Invalid
>
>
> In current implementation of _org.apache.cxf.jaxrs.client.AbstractClient_ is
> response body input stream closed in following method
> {noformat}
> protected boolean responseStreamCanBeClosed(Message outMessage, Class<?>
> cls) {
> return cls != InputStream.class
> &&
> MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close"));
> }
> {noformat}
> That means, that in case that if the _response.stream.auto.close_ is not set
> to true, the input stream stays opened -> Socket is not free for reusing.
> In my opinion the proper implementation should be:
> {noformat}
> protected boolean responseStreamCanBeClosed(Message outMessage, Class<?>
> cls) {
> return !cls.isAssignableFrom(InputStream.class) ||
> MessageUtils.isTrue(outMessage.getContextualProperty("response.stream.auto.close"));
> }
> {noformat}
> This way is the response body input stream:
> * is closed even when the auto close property is not set (= default?) and cls
> is not a child of InputStream
> * the input stream is not closed, if cls is child of InputStream class (do
> not know if there might be cases of its subclasses) and the auto close
> property is not set to true
> * the auto close property still can over-rule the fact that the cls is
> assignable from InputStream
> The current implementation is in my opinion incorrect, because in case of a
> lot quick/parallel requests over proxy clients we faced running out of
> Sockets - similarly to what is described in CXF-5144
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)