Почему я получаю java.io.IOException: поток закрыт, исключение? - PullRequest
0 голосов
/ 03 июня 2018

Из моего клиента Java я пытаюсь получить данные с сервера Python, возвращающего XML.Мои шаги:

  1. Проверка Inputstream для XML
  2. Преобразование Inputstream в XML для обработки

Мой код проверки в классе клиента выглядит следующим образом

public static boolean isValidXML(InputStream xmlInputStream) {
    try {
        Source xmlFile = new StreamSource(xmlInputStream);
        URL schemaFile = new URL("https://www.w3.org/2001/XMLSchema.xsd");
        SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema schema = schemaFactory.newSchema(schemaFile);
        Validator validator = schema.newValidator();

        validator.setErrorHandler(new ErrorHandler() {

                // all the overridden methods 
        });

        validator.validate(xmlFile);

    } catch (SAXException ex) {
        System.out.println(ex.getMessage());
        return false;

    } catch (IOException e) {
        System.out.println(e.getMessage());
        return false;
    }
    return true;
}

}

И обработка InputStream идет следующим образом

HttpURLConnection con = (HttpURLConnection) obj.openConnection();
if (MyClient.isValidXML(con.getInputStream())) {
            BufferedReader inputReader = new BufferedReader(new InputStreamReader(con.getInputStream()));
            StringBuilder sb = new StringBuilder();
            String inline = "";
            while ((inline = inputReader.readLine()) != null) {
                sb.append(inline);
            }

            SAXBuilder builder = new SAXBuilder();

            Document document = (Document) builder.build(new 
            ByteArrayInputStream(sb.toString().getBytes()));
}

При выполнении оператор цикла while - while ((inline = inputReader.readLine()) != null), выбрасывающий поток, является закрытым исключением.

Если я удаляю часть проверки, тогда обработка происходит, как и ожидалось, за исключением, конечно, выдачи ошибки синтаксического анализа для некоторого искаженного XML.Так что, вероятно, поток закрывается где-то в части проверки, но я не уверен, где.

Спасибо за чтение.Я ценю вашу помощь.

1 Ответ

0 голосов
/ 03 июня 2018

Это происходит потому, что вы исчерпали и закрыли входной поток, проверив его.Вы оба держите собаку и лаете сами.Если синтаксический анализ уже вызывает исключение, когда ввод недействителен, вам вообще не нужен шаг проверки.Так что убери это.

...