簡體   English   中英

HttpClientBuilder - java.lang.NoSuchFieldError:INSTANCE

[英]HttpClientBuilder - java.lang.NoSuchFieldError: INSTANCE

我有一個Maven Java項目,它使用HttpClient來執行HTTP請求。 在我的本地Java Web Server上,一切正常。 但在我將其部署到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應用程序中的Mashape Unirest的java.lang.NoSuchFieldError:org.apache.http.message.BasicLineFormatter.INSTANCE我嘗試使用以下代碼來獲取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版本是相同的。 我看到的每個類似的問題都有不連貫的jar版本作為失敗的根源。 這個錯誤還有其他原因嗎?

更新

在評論中討論后,我將更新我的問題:

依賴樹:

在此輸入圖像描述

所以現在我可以看到版本沖突,我刪除了neo-java-web-api classLoader現在再次返回版本4.3.2。 但我仍然從一開始就得到錯誤。

現在,沒有neo-java-web-api的新的完整依賴關系樹如下所示: 在此輸入圖像描述

我仍然無法找到實際問題的解決方案。 但至少我可以找到一個解決方法。 我將范圍更改為<scope>provided</scope>並僅使用函數,這些函數也可以在4.1.4版中使用。 例如new DefaultHttpClient(cm); 而不是HttpClientBuilder.create().build();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM