FileNotFoundException при использовании HttpURLConnection для чтения вывода из elasticsearch - PullRequest
0 голосов
/ 06 мая 2020

Настройка: я настроил базу данных elasticsearch и создал моментальный снимок. Необязательно знать, что это такое, достаточно знать, что он принимает команды с использованием методов http. Если бы я делал это в консоли, я бы использовал curl. Например, чтобы удалить снимок, я бы использовал

curl -X DELETE "localhost:9200/_snapshot/bck/sn5?pretty"

(? Pretty просто форматирует вывод, иначе все будет в одной строке)

Это даст мне результат например:

{
  "error" : {
    "root_cause" : [
      {
        "type" : "snapshot_missing_exception",
        "reason" : "[bck:sn5] is missing"
      }
    ],
    "type" : "snapshot_missing_exception",
    "reason" : "[bck:sn5] is missing"
  },
  "status" : 404
}

Теперь я пытаюсь сделать это в java. Как я прочитал, мне нужен inputStream для чтения вывода.

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class main {

    public static void main(String[] args) throws IOException {
        String urlTarget = "http://localhost:9200/_snapshot/bck/sn5";
        URL url = new URL(urlTarget);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setRequestMethod("DELETE");
        InputStream inputStream = connection.getInputStream();
        //read the data
    }
}

Но это приводит к FileNotFoundException для входящего потока. Тем не менее, я могу распечатать connection.getResponse (), который здесь приводит к «Not Found».

Итак, мой простой вопрос: как я могу прочитать результат, который я вижу с помощью curl в моем java code?

изменить: после предложений о переключении на connection.getErrorStream я получаю исключение NullPointerException, когда хочу инициализировать bufferedReader.

Новый фрагмент:

InputStream inputStream = connection.getErrorStream();
//read the response
BufferedReader rdr = new BufferedReader(new InputStreamReader(inputStream));
String inputLine;
StringBuffer output = new StringBuffer();
while ((inputLine = rdr.readLine()) != null) {
    output.append(inputLine + "\n");
}
rdr.close();

Спасибо !

1 Ответ

1 голос
/ 06 мая 2020

Вы получаете FileNotFoundException от getInputStream(), потому что сервер ответил HTTP 404, что фактически означает «файл не найден».

Если вы хотите прочитать тело ответа независимо от HTTP статус ошибки, позвоните getErrorStream() Vice getInputStream() на объект HttpURLConnection.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...