Jersey客户端是否在异常时关闭连接?

时间:2014-09-04 20:13:05

标签: jersey jax-rs

我已阅读Jersey documentation,并说泽西岛在读取实体后会自动关闭连接(例如response.readEntity(SomeObject.class))

但是当抛出异常时,无论是错误的请求还是套接字超时,Jersey会自动关闭连接,还是应该有一个调用client.close()的finally子句?

1 个答案:

答案 0 :(得分:7)

没有。如果发生异常,Jersey也不会调用client.close(),JerseyClient也不会实现AutoCloseable

您可以轻松测试此内容。如果在关闭后调用方法,则客户端会抛出IllegalStateException:

Client client = ClientBuilder.newClient();
client.close();
client.target("http://stackoverflow.com").request().get(); // IllegalStateException

但是你可以在捕获异常后调用一个方法:

Client client = ClientBuilder.newClient();
try {
    client.target("http://foo.bar").request().get(); // java.net.ConnectException: Operation timed out
} catch (Exception ex) {
    client.target("http://stackoverflow.com").request().get(); // works
}

关闭是你的工作。

更新:JAX-RS 2.1 will use AutoClosables