Jersey Client关闭InputStream响应 - 它真的有效吗?

时间:2015-10-20 11:36:51

标签: java jersey jersey-2.0 dropwizard jersey-client

我正在使用Jersey Client v2.16(Dropwizard 0.8.0的传递依赖,我也在使用它)。

当实体被读作InputStream时,我对某个响应的结束机制感到困惑。 documentation州:

  

此外,如果实体被读入InputStream(通过response.readEntity(InputStream.class)),则连接将保持打开状态,直到您完成从InputStream读取为止。在这种情况下,应在从InputStream读取结束时手动关闭InputStream或Response。

然而,当我使用Response.readEntity(InputStream.class)获取响应实体时,我最终得到的是org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$UnCloseableInputStream的一个实例,顾名思义,当{{1}时,它不会释放任何内容正在调用方法(打破close()合同,我可能会说)。这是InputStream方法:

close()

因此,我最终在池中的HTTP连接未发布并慢慢填满池。

鉴于可能不容易获得对响应的引用,并且官方文档声明@Override public void close() throws IOException { if (LOGGER.isLoggable(Level.FINE)) { LOGGER.log(Level.FINE, LocalizationMessages.MBR_TRYING_TO_CLOSE_STREAM(reader.getClass())); } } ,我如何设法实际释放物理资源?

1 个答案:

答案 0 :(得分:3)

看起来这是Jersey客户端的一个已知错误,根据https://java.net/jira/browse/JERSEY-2878https://github.com/jersey/jersey/releases/tag/2.21

,它似乎已在2.21中修复