当前位置: 首页 > 知识库问答 >
问题:

泽西客户端关闭输入流响应-它真的工作吗?

严子默
2023-03-14

我使用的是Jersey客户端v2。16(Dropwizard 0.8.0的可传递依赖项,我也在使用它)。

当实体被读取为InputStream时,我不知何故对响应的关闭机制感到困惑。文件规定:

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

但是,当我使用Response.readEntity(InputStream.class)获取响应实体时,我得到的是一个org.glassfish.jersey.message.internal.ReaderInterceptorExecator$UnCloseableInputStreamhtml" target="_blank">实例,顾名思义,它在调用clo()方法时不会释放其下的任何内容(我可能会说是破坏了InputStream契约)。这是关闭()方法:

@Override
public void close() throws IOException {
    if (LOGGER.isLoggable(Level.FINE)) {
        LOGGER.log(Level.FINE, LocalizationMessages.MBR_TRYING_TO_CLOSE_STREAM(reader.getClass()));
    }
} 

因此,我最终会发现我的池中的HTTP连接未被释放,并慢慢填充池。

考虑到获取对响应的引用可能不是很容易,并且官方文档声明应手动关闭输入流**或**响应,我如何实际释放物理资源?

共有1个答案

归德厚
2023-03-14

看起来这是泽西客户端的一个已知错误,根据https://java.net/jira/browse/JERSEY-2878和https://github.com/jersey/jersey/releases/tag/2.21,它似乎在2.21中得到修复

 类似资料:
  • 不确定发生了什么,但我不知道我的反应在哪里被劫持了。

  • 当我在Jersey中有一个监听POST请求的方法,并且当我想从中获取数据的方法中有一个InputStream作为参数时,我需要关闭这个InputStream还是Jersey会处理这个问题? 我没有找到任何相关信息。不久前,我读过使用JAX-RS 2.0的RESTful Java,我不记得是否有人提到过它。现在浏览一下,我发现了几个代码示例,并且流没有关闭。我觉得没必要,但我想问问。

  • 我在RestEasy客户端-3.0.8中得到以下异常

  • 我使用客户机对一个API进行REST调用,该API返回mulipart中的一个Json和一个PDF文件作为响应的第一和第二部分。 使用上面的客户端解析这个多部分响应的正确方法是什么?

  • 我有一个网站,我只是想写一个脚本,发送字符串到一个文本输入在页面(唯一的一个)和点击提交。我构建了一个selenium系统,但被告知这是矫枉过正的,访问页面上的endpoint并以这种方式发送文本要“容易”得多。 线程“main”java.lang.IllegalStateException中出现异常:未找到InjectionManagerFactory。在org.glassfish.jersey

  • 我设计了一个多部分Jersey REST服务,如下所示,用于接收多部分请求(文件上传)并将文件保存在磁盘位置: 我的测试客户是: 但我无法得到回应。 当我使用HTML网页作为客户端通过调用REST服务上传文件时,它工作得很好,但从REST客户端它不工作。 客户有什么需要更改的吗?