Из моего клиента Java я пытаюсь получить данные с сервера Python, возвращающего XML.Мои шаги:
- Проверка Inputstream для XML
- Преобразование 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.Так что, вероятно, поток закрывается где-то в части проверки, но я не уверен, где.
Спасибо за чтение.Я ценю вашу помощь.