0

我正在寻找使用 jersey 客户端(使用 apache http 客户端 4.x)执行 POST 请求的正确方法

由于 Client 实例和 WebResource 实例是线程安全的,编码该方法的自然方式是:

public AuthorizedAccount createAuthTokenFromUserPass(Credentials credentials)
        throws AuthenticationServiceClientException {
    ClientResponse response = resource.accept("application/x-protobuf").post(
                              ClientResponse.class, credentials);
    return getAuthorizedAccountFromResponse(response);
}

ClientResponse 实例已正确释放。

当从多个线程执行此方法时,最终会为每个线程将相同的凭据实例发布到服务器。

一个解决方案是同步方法,但最终会按顺序执行 POST。

有不同的方法吗?(避免重新创建客户端实例)

4

1 回答 1

0

在花了很多时间试图找出什么不能正常工作之后,我发现问题并不真正在 jersey 客户端实现中,而是在我自己的代码中。我使用了 MessageBodyWriter 的自定义实现,但我不够小心。我没有正确阅读接口的合同。我在 getSize() 和 writeTo() 的调用之间共享了一个实例变量,并重用了 MassageBodyWriter。

于 2013-05-12T13:28:02.660 回答