Подтвердить что ты не робот

Пример HTTPClient - Исключение в потоке "main" java.lang.NoSuchFieldError: INSTANCE

Я использую компоненты HttpClient из Apache для следующей простой программы, и я вижу следующее исключение:

Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:52)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:56)
    at org.apache.http.impl.io.DefaultHttpRequestWriterFactory.(DefaultHttpRequestWriterFactory.java:46)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.(ManagedHttpClientConnectionFactory.java:72)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.(ManagedHttpClientConnectionFactory.java:84)
    at org.apache.http.impl.conn.ManagedHttpClientConnectionFactory.(ManagedHttpClientConnectionFactory.java:59)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager$InternalConnectionFactory.(PoolingHttpClientConnectionManager.java:487)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.(PoolingHttpClientConnectionManager.java:147)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.(PoolingHttpClientConnectionManager.java:136)
    at org.apache.http.impl.conn.PoolingHttpClientConnectionManager.(PoolingHttpClientConnectionManager.java:112)
    at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:726)
    at com.starwood.rms.controller.property.HttpExample.main(HttpExample.java:14)
public class HttpExample {

    public static void main(String[] args) {
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("https://www.google.com/?q=java");

        try {
            HttpResponse response = client.execute(request);
            System.out.println(response.getStatusLine());

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Я использую

  • HTTPClient-4.3.3.jar
  • Httpcore-4.3.2.jar

Любые идеи?

4b9b3361

Ответ 1

Этот код работает... без каких-либо ошибок.. проверьте пакеты, если вы используете аналогичный импорт.

package com.jai.http;

import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClientBuilder;

public class HttpExample {

    /**
     * @param args
     */
    public static void main(String[] args) {
        HttpClient client = HttpClientBuilder.create().build();
        HttpGet request = new HttpGet("https://www.google.com/?q=java");
        try {
            HttpResponse response = client.execute(request);
            System.out.println(response.getStatusLine());

        } catch (Exception e) {
            e.printStackTrace();

        }

    }
}

Ответ 2

Глядя на исходный код DefaultHttpRequestWriterFactory

package org.apache.http.impl.io;

import org.apache.http.HttpRequest;
import org.apache.http.annotation.Immutable;
import org.apache.http.io.HttpMessageWriter;
import org.apache.http.io.HttpMessageWriterFactory;
import org.apache.http.io.SessionOutputBuffer;
import org.apache.http.message.BasicLineFormatter;
import org.apache.http.message.LineFormatter;

@Immutable

public class  [More ...] DefaultHttpRequestWriterFactory implements HttpMessageWriterFactory<HttpRequest> {

    public static final DefaultHttpRequestWriterFactory INSTANCE = new DefaultHttpRequestWriterFactory();

    private final LineFormatter lineFormatter;

    public  [More ...] DefaultHttpRequestWriterFactory(final LineFormatter lineFormatter) {
        super();
        this.lineFormatter = lineFormatter != null ? lineFormatter : BasicLineFormatter.INSTANCE;
    }

    public  [More ...] DefaultHttpRequestWriterFactory() {
        this(null);
    }

    public HttpMessageWriter<HttpRequest>  [More ...] create(final SessionOutputBuffer buffer) {
        return new DefaultHttpRequestWriter(buffer, lineFormatter);
    }

}

Вы уверены, что используете HttpCore 4.3.2? DefaultHttpRequestWriterFactory попытайтесь решить

BasicLineFormatter.INSTANCE

но не может найти его.

Проверьте свой путь к классам для библиотек, которые могут содержать другой класс BasicLineFormatter, возможно, у вас есть HttpCore из старой версии в конфликте с версией 4.3.2.

Ответ 3

У меня была эта проблема с Hadoop. В их общей библиотеке использовалась старая версия httpclient-4.2.5.jar и httpcore-4.2.5.jar.

Я решил это путем затенения частей с помощью maven-shade-plugin

<relocations>
    <relocation>
        <pattern>org.apache.http</pattern>
        <shadedPattern>shaded.org.apache.http</shadedPattern>
    </relocation>
</relocations>

Ответ 4

Вызвано: java.lang.NoSuchFieldError: INSTANCE

одно из решений java.lang.NoSuchFieldError: INSTANCE. Это происходит, если у нас есть две версии diff того же класса в нашем пути к классам.... [...], Итак, сначала мы найдем этот класс (одну версию класса), щелкните этот класс, выберите "путь сборки", затем нажмите "удалить из пути сборки". по 333ccc333

Ответ 5

У меня была эта проблема. Похоже, что существует проблема при инициализации HttpClient с помощью HttpClientBuilder.create(). Build(). Если вы хотите получить более немедленное решение, просто используйте новый DefaultHttpClient() для инициализации HttpClient.

HttpClient client = new DefaultHttpClient();

Ответ 6

Для тех, кто использует Webpshere, убедитесь, что для вашей политики загрузки классов установлено значение "Родительский последний", иначе это не сработает, так как WAS использует свою собственную версию общих прав HTTP, которая может быть противоречивой.

Ответ 7

У меня тоже была эта проблема, я понял, что это было, когда мы обновили до версии java 1.8, я просто понизился до 1,7 и работает так, как ожидалось. Не знаю, почему версия стала проблемой.

Ответ 8

Я просто сходил с ума от этого и Eclipse, пока не понял, что, подобно совету Pat B Webpshere, он вызывает проблемы для Eclipse, а также наличие зависимостей в неправильном порядке.

Properties → Java Build Path → Order and Export

Поиграйте немного здесь с порядком ядра и клиента.