как исправить исключение NullPointerException при загрузке документа в Elasticsearch 7.3 - PullRequest
0 голосов
/ 26 мая 2020

Я хочу загрузить строку JSON в Elasticsearch версии 7.3.

Ниже приведен код, который я использую для этого.

    private RestHighLevelClient restHighLevelClient;
    String jsonString="//here the complete JSON string";
    JSONObject jsonObject = new JSONObject(cojsonStringntent1.toString());
    HashMap<String, Object> hashMap = new Gson().fromJson(jsonObject.toString(), HashMap.class);

    IndexRequest indexRequest = new IndexRequest("index", "type").source(hashMap);
    restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);

Исключение: исключение в потоке «main» java .lang.NullPointerException в строке restHighLevelClient.index(indexRequest, RequestOptions.DEFAULT);

Если я отправлю ту же самую jsonString через POSTMEN, то она будет отлично загружена в ELASTICSEARCH.

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Если вы не используете spring (как это не упомянуто), вы можете использовать простой код ниже для создания resthighlevelclient.

В приведенном ниже коде я читаю конфигурацию elasticsearch из config, не стесняйтесь изменять его так, как вы читаете свойства или конфигурацию, или если вы просто хотите быстро протестировать его, жестко закодируйте значения хоста и порта

RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
                RestClient.builder(new HttpHost(configuration.getElasticsearchConfig().getHost(),
                        configuration.getElasticsearchConfig().getPort(),
                        "http")));
1 голос
/ 27 мая 2020

Судя по вашему образцу кода, ваш restHighLevelClient действительно вообще не инициализирован. Пожалуйста, найдите фрагмент кода ниже, как вы могли бы решить эту проблему:

    @Bean
public RestHighLevelClient elasticRestClient () {
    String[] httpHosts = httpHostsProperty.split(";");
    HttpHost[] httpHostsAsArray = new HttpHost[httpHosts.length];
    int index = 0;

    for (String httpHostAsString : httpHosts) {
        HttpHost httpHost = new HttpHost(httpHostAsString.split(":")[0], new Integer(httpHostAsString.split(":")[1]), "http");
        httpHostsAsArray[index++] = httpHost;
    }

    RestClientBuilder restClientBuilder = RestClient.builder(httpHostsAsArray)
            .setRequestConfigCallback(builder -> builder
                    .setConnectTimeout(connectTimeOutInMs)
                    .setSocketTimeout(socketTimeOutInMs)
            );

    return new RestHighLevelClient(restClientBuilder);
}

и ваш класс impl использует автоматически подключенный bean-компонент RestHighLevelClient:

    @Autowired
private RestHighLevelClient restClient;
...