Java Http客户端 - 没有这样的字段错误

时间:2017-06-11 18:21:52

标签: java server httpclient nosuchfieldexception

我正在尝试使用Digital Ocean java库,并尝试使用以下方法创建连接:

CloseableHttpClient httpClient = HttpClients.createDefault();

client = new DigitalOceanClient("v2", token, httpClient);

问题在于CloseableHttpClient httpClient对象。该库使用httpcore版本4.4.1和httpclient版本4.5。它给了我一个java.lang.NoSuchFieldError。

这是我的日志:

Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:144)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:955)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:58)
at main.java.servers.DigitalOceanServer.setup(DigitalOceanServer.java:28)

我发现关于NoSuchFieldError的信息和文档很少,所以我假设它与导致此错误的httpcore和/或httpclient版本有关。

1 个答案:

答案 0 :(得分:0)

自Apache httpclient 4.4版以来,AllowAllHostnameVerifier.java中引入了字段变量INSTANCE

如果同时使用新版SSLConnectionSocketFactory和旧版AllowAllHostnameVerifier,则会抛出java.lang.NoSuchFieldError: INSTANCE

可能的原因之一是两个版本的Apache httpclient jar都在你的库目录中。