У меня есть проект Maven Java, который использует HttpClient для выполнения HTTP-запросов. На моем локальном веб-сервере Java все работает нормально. Но после того, как я развернуть его в SAP Hana Cloud Platform я получаю следующее сообщение об ошибке:HttpClientBuilder - java.lang.NoSuchFieldError: INSTANCE
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 как источник неудачи. Может ли быть другая причина этой ошибки?
Update
После обсуждения в комментариях, я буду обновлять свой вопрос:
Завис дерево:
Так что теперь я мог видеть версию конфликта, и я удалены neo-java-web-api
. КлассLoader теперь снова возвращает версию 4.3.2. Но я все еще получаю ошибку с самого начала.
Новое, полное дерево зависимостей без neo-java-web-api
теперь выглядит следующим образом:
Ах, но класс в конфликте - BasicLineFormatter. Вместо URL-адреса, который вы захватываете, попробуйте взять тот же из исходного вопроса: 'URL resource = classLoader.getResource (" org/apache/http/message/BasicLineFormatter.class ");' – Pace
Я также пробовал это раньше , Ответ: «jar: file: /some/path/WEB-INF/lib/httpcore-4.3.2.jar !/org/apache/http/message/BasicLineFormatter.class». Это та же версия, что и моя зависимость httpcore. – Recobe
Можете ли вы удалить "httpcore' dep и повторите попытку. Этот фрагмент уже находится в папке [pom] (https://repo1.maven.org/maven2/org/apache/httpcomponents/httpclient/4.3.5/httpclient-4.3.5.pom) 'httpclient'. –