我需要使用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。任何我出错的想法?
答案 0 :(得分:1)
这是Jersey文档中记录的默认HTTP客户端(com.sun.jersey.api.client.Client)的限制。您必须使用Apache HTTP Client来实现此功能。
在上一个问题的答案中看起来有人已经建议这样做:Jersey Client API - authentication。
编辑:更正了对默认Jersey HTTP客户端的引用,以避免混淆。