JerseyClient使用DefaultHttpClient

时间:2011-07-25 13:39:17

标签: client httpclient jersey

我需要使用Jersey Client访问受SSL保护的JAX-WS Web服务。我已经成功地使用有限的配置工作,只是让客户端使用默认的HTTPURLConnection API。

然而,这种方法对我的整体解决方案不起作用,因为它不允许我灵活地更改向WS发出请求时使用的凭据。我正在尝试使用DefaultHTTPClient,然后将其传递给初始化的Client对象。

NTCredentials credentials = new NTCredentials("username", "password",
    computerName, domainName);
DefaultHttpClient httpClienttemp = new DefaultHttpClient();
DefaultHttpClient httpClient = wrapClient(httpClienttemp);
httpClient.getCredentialsProvider().setCredentials(AuthScope.ANY, credentials );
ClientConfig config = new DefaultClientConfig();

wrapClient方法创建X509TrustManager并覆盖必要的方法,以便接受所有证书。它还为端口443上的https访问创建了一个SchemeRegistry条目。此配置导致连接被拒绝异常。

奇怪的是,如果我在SchemeRegistry中为http添加一个额外的条目并给它一个443的端口,那么请求会被发送,但是会抛出一个连接重置异常。

我用来创建WebResource对象的URL是https但是我在头文件中声明的SOAPAction使用http。任何我出错的想法?​​

1 个答案:

答案 0 :(得分:1)

这是Jersey文档中记录的默认HTTP客户端(com.sun.jersey.api.client.Client)的限制。您必须使用Apache HTTP Client来实现此功能。

在上一个问题的答案中看起来有人已经建议这样做:Jersey Client API - authentication

编辑:更正了对默认Jersey HTTP客户端的引用,以避免混淆。