mget производит: невозможно разобрать тело ответа для ответа

Я отправляю запрос Multi-Get через Java High Level REST Client и получаю следующее исключение:

"Невозможно проанализировать тело ответа для Response{requestLine=POST /_mget HTTP / 1.1, host = http://localhost:9200/, response=HTTP/1.1 200 OK}"

Я вытащил следующий JSON из журналов, отправленных в Elastic:

{
    "docs": [
        {
            "_index": "blah",
            "_type": null,
            "_id": "some-id-232332",
            "routing": null,
            "stored_fields": null,
            "version": -3,
            "version_type": "internal",
            "_source": {
                "includes": [],
                "excludes": []
            }
        }
    ]
}

Я отправил указанный выше JSON в Elastic через Postman и вижу следующий ответ (такой же, как и в журналах):

{
    "docs": [
        {
            "_index": "blah",
            "_type": null,
            "_id": "some-id-232332",
            "found": false
        }
    ]
}

Разве это не правильный ответ? Это проблема с клиентом elasticsearch-rest-high-level-client?

Elastic 7.5.0, https://mvnrepository.com/artifact/org.elasticsearch.client/elasticsearch-rest-high-level-client/7.5.2

1 ответ

Решение

Мне нужно было проверить getCause()это исключение для реальной проблемы. Я проходилnull Джексону на mapper.readValue(nullBytes, Customer.class); была настоящая проблема.

Достаточно интересно NPE показывает себя ‍♂️.

Трассировка стека: java.util.concurrent.ExecutionException: java.io.IOException: невозможно проанализировать тело ответа для Response{requestLine=POST /_mget HTTP / 1.1, host = http://localhost:9200/, response=HTTP/1.1 200 ОК}
...
...
НАСТОЯЩАЯ ПРОБЛЕМА ЗДЕСЬ!!!
Вызвано: java.lang.IllegalArgumentException: аргумент "src" имеет значение null в com.fasterxml.jackson.databind.ObjectMapper._assertNotNull(ObjectMapper.java:4429)

restHighLevelClient.mgetAsync(multiGetRequest, RequestOptions.DEFAULT, new ActionListener<MultiGetResponse>() {
    @Override
    public void onResponse(MultiGetResponse response) {
      for (var responseItem : response.getResponses()) {
        try {
          // simulating a null source
          byte[] nullBytes = null;
          customer = mapper.readValue(nullBytes, Customer.class);
        } catch (IOException e) {
          result.completeExceptionally(e);
        }
      }
      result.complete(true);
    }

    @Override
    public void onFailure(Exception ex) {
      //the real problem!!!
      //log.error("ex.cause", ex.getCause());
      log.error("error with mget", ex);
      result.completeExceptionally(ex);
    }
  });

Полный исходный код воспроизведения, Полный файл журнала

Другие вопросы по тегам