java - HttpClientBuilder - java.lang.NoSuchFieldError : INSTANCE

标签 java maven http

我有一个使用 HttpClient 执行 HTTP 请求的 Maven Java 项目。在我本地的 Java Web 服务器上,一切正常。但是在我将其部署到 SAP Hana Cloud Platform 后,出现以下错误:

java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:52)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<init>(DefaultHttpRequestWriterFactory.java:56)
at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.<clinit>(DefaultHttpRequestWriterFactory.java:46)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:72)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<init>(ManagedHttpClientConnectionFactory.java:84)
at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.<clinit>(ManagedHttpClientConnectionFactory.java:59)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.<init>(PoolingHttpClientConnectionManager.java:493)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:149)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:138)
at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.<init>(PoolingHttpClientConnectionManager.java:114)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:726)
at com.sap.hana.cloud.odata.service.OlingoSampleApp.getHttpclient(OlingoSampleApp.java:382)
at com.sap.hana.cloud.odata.service.OlingoSampleApp.getCsrfToken(OlingoSampleApp.java:374)
at com.sap.hana.cloud.odata.service.ODataCalls.doGet(ODataCalls.java:163)
...

我的依赖是这样的:

<dependency>
    <groupId>org.apache.httpcomponents</groupId>
    <artifactId>httpclient</artifactId>
    <version>4.3.5</version>
    <scope>compile</scope>
</dependency>

根据这个问题java.lang.NoSuchFieldError: org.apache.http.message.BasicLineFormatter.INSTANCE from Mashape Unirest in Java application我尝试使用以下代码来获取 ClassLoader Ressource。

ClassLoader classLoader = this.getClass().getClassLoader();
URL resource = classLoader.getResource("org/apache/http/impl/client/HttpClientBuilder.class");
return resource;

它返回以下内容

"jar:file:/some/path/WEB-INF/lib/httpclient-4.3.5.jar!/org/apache/http/impl/client/HttpClientBuilder.class"

可以看到jar-versions是一样的。我看过的每个类似问题都有不连贯的 jar 版本作为失败的根源。这个错误还有其他原因吗?

更新

在评论中讨论后我会更新我的问题:

依赖树:

enter image description here

现在我可以看到版本冲突并删除了 neo-java-web-api。 classLoader 现在再次返回版本 4.3.2。但我仍然从一开始就得到错误。

没有 neo-java-web-api 的新的、完整的依赖树现在看起来像下面这样: enter image description here

最佳答案

我仍然找不到解决实际问题的方法。但至少我可以找到解决方法。我将范围更改为 <scope>provided</scope>并且只使用功能,这些功能在版本 4.1.4 中也可用。例如new DefaultHttpClient(cm);而不是 HttpClientBuilder.create().build();

关于java - HttpClientBuilder - java.lang.NoSuchFieldError : INSTANCE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30949201/

相关文章:

java - 通过引用调用 - 或 - 通过值调用

java - m2e如何判断项目是否具有java性质?

java - 如何将 VM 参数传递给 tomcat maven 插件?

rest - REST API 中的操作

php - Guzzle HTTP 异步池请求

java - Java 中的按钮/图像及其定位(android 应用程序)问题

java - Spring:动态更新数据库配置

Java Sound API 无法在 Web 应用程序 UI 中单击按钮时停止录制

java - 由于 "Failed to execute goal org.apache.felix:maven-bundle-plugin:2.5.3",Maven 构建失败

http - Tomcat http 没有重定向到 https