进行 HTTPS 调用的多头球衣客户端

问题描述

我正在使用最新版本的 javax.ws.rs.client.Client(Jersey client 2.34) 使用线程发出多个 Https 请求。

当我使用多个线程同时使用 Jersey 客户端进行调用时,出现此异常。

javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building Failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

此异常似乎与信任库中不存在的无效证书有关。我已将我正在访问的站点的证书添加到信任库中。此外,如果只使用单线程,代码工作正常。

我的代码一个简单版本如下所示:

.... // code that starts the threads.
for(int i=0;i<noOfThreads;i++){
   executorService.execute(new RunnableClient(url,jerseyClient));
}
....


class RunnableClient implements Runnable{
   ...
   @Override
   public void run(){
           jerseryClient.fetchResults(url);
   }
}


class JerseyClient{
   ...
   Client client;
   ...

   public Response fetchResults(String url){
         response = this.client.target(new URI(url)).request(MediaType.TEXT_PLAIN)
                            .header(Constants.AUTHORIZATION,getToken())
                            .get();
         return response;

}

....

// jerseyClient is the object of my user defined class which holds a javax.ws.rs.client.Client object as member.

需要注意的是,我只制作 JerseyClient 的单个实例并重用它。

但是如果运行多个线程,代码就会失败。任何人都可以解释为什么会引发此异常以及如何解决它。

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)