我已阅读Jersey documentation,并说泽西岛在读取实体后会自动关闭连接(例如response.readEntity(SomeObject.class))
但是当抛出异常时,无论是错误的请求还是套接字超时,Jersey会自动关闭连接,还是应该有一个调用client.close()的finally子句?
答案 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。