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);
}
});