当我调用此代码时:
HttpClientBuilder clientBuilder = HttpClientBuilder.create();
LaxRedirectStrategy laxStrategy = new LaxRedirectStrategy();
clientBuilder = clientBuilder.setRedirectStrategy(laxStrategy);
httpClient = clientBuilder.build(); // FAILS HERE
我得到 java.lang.NoSuchFieldError: INSTANCE
看起来找不到 org.apache.http.conn.ssl.SSLConnectionSocketFactory 类,但是在我的类路径上的 jar 中找到了该类。我怎样才能找到罪魁祸首?
谢谢! 迈克
您的类路径上有不同版本的 Apache Commons HTTP Client。您可以使用 jdk 8 尝试以下版本。
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.1</version>
</dependency>
对我来说这看起来像是一个依赖性问题。您正在寻找的课程可能存在于您的 CP 上的两个不同罐子中。
初始化 SSLConnectionSocketFactory 字段时可能会发生这种情况:
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
= AllowAllHostnameVerifier.INSTANCE;
在我的例子中,org.apache.http.conn.ssl.AllowAllHostnameVerifier 类没有 INSTANCE 字段,因为它被 tika-app 遮蔽(修补)了。
检查您拥有该类的哪个依赖项(jar)以及它的外观如何。如果可能的话尝试排除它。