Создание mget: невозможно проанализировать тело ответа для ответа - PullRequest
0 голосов
/ 05 марта 2020

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

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

Я вытащил следующее JSON из журналов, которые были отправлены в Elasti c:

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

Я отправил выше JSON в Elasti c через Почтальона, и я вижу следующий ответ (который является тем же Я вижу в журналах):

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

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

Elasti c 7.5.0, org.elasticsearch.client :asticsearch-rest-high-level-client: 7.5.2

1 Ответ

1 голос
/ 06 марта 2020

Мне нужно было проверить 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 , ответ = HTTP / 1.1 200 OK}
...
...
НАСТОЯЩАЯ ПРОБЛЕМА ЗДЕСЬ !!! 101
Причина: java .lang.IllegalArgumentException: аргумент "sr c" равен нулю на com.faster xml .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);
    }
  });

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

...