Как заставить SAX Parser ждать завершения загрузки файла перед его анализом? - PullRequest
0 голосов
/ 20 сентября 2010

У меня проблема с тем, что мои XML-файлы загружаются медленно и не завершают загрузку до того, как они начинают анализироваться, что вызывает исключение из моего синтаксического анализатора исключения xml, показывающего, что файл загружен не полностью.

Полная ошибка из logcat: «ОШИБКА / Ошибка (323): errororg.apache.harmony.xml.ExpatParser $ ParseException: в строке 10, столбец 46: неправильно сформирован (недопустимый токен)»

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

Что было бы лучшим способом заставить синтаксический анализатор ожидать InputSource, прежде чем продолжитьи анализ данных XML?

Код ниже - это код, который я использую для получения и анализа файла.

SAXParserFactory spf = SAXParserFactory.newInstance();
SAXParser sp = spf.newSAXParser();
XMLReader xr = sp.getXMLReader();
GradeHandler gradeHandler = new GradeHandler();
xr.setContentHandler(gradeHandler);
URL url = new URL("https://url/to/xml/file");
HttpsURLConnection ucon = (HttpsURLConnection)url.openConnection();
ucon.setHostnameVerifier(new AllowAllHostnameVerifier());
xr.parse(new InputSource(new BufferedInputStream(ucon.getInputStream())));

1 Ответ

3 голосов
/ 20 сентября 2010

Каков наилучший способ заставить синтаксический анализатор ждать InputSource, прежде чем продолжить и анализировать данные xml?

Возможно, сначала загрузив ответ перед его использованием?

ByteArrayOutputStream output = new ByteArrayOutputStream();
copy(ucon.getInputStream(), output);
xr.parse(new InputSource(new ByteArrayInputStream(output.toByteArray());
...