我正在尝试使用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版本有关。
答案 0 :(得分:0)
自Apache httpclient 4.4版以来,AllowAllHostnameVerifier.java中引入了字段变量INSTANCE
。
如果同时使用新版SSLConnectionSocketFactory
和旧版AllowAllHostnameVerifier
,则会抛出java.lang.NoSuchFieldError: INSTANCE
。
可能的原因之一是两个版本的Apache httpclient jar都在你的库目录中。