Подтвердить что ты не робот

DocumentBuilder.parse(InputStream) возвращает значение null

Я исправляю ошибку в существующем коде, относящемся к DocumentBuilder.parse. У меня есть код ниже:

 String theOutput;
    theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString();
    StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream(), "http://sampleApps.net/static/dataDef1.1.dtd");                                         
    Document xmlDoc = dBuilder.parse(xmlSource.getInputStream());

Я не понимаю, почему я получаю нулевое значение для xmlDoc, хотя у меня есть допустимые значения для переменныхOutput и xmlSource. Пожалуйста помоги.

спасибо!

4b9b3361

Ответ 1

Есть хороший шанс, что поток был проанализирован правильно, только потому, что xmlDoc.toString() всегда будет "[#document: null]". Это не означает, что дерево DOM пусто. Сначала проверьте, если в документе есть несколько узлов (детей).

Если DOM действительно был пустым, я сначала распечатал содержимое входного потока на консоль (возможно, xmlSource.getInputStream().toString() уже возвратил содержимое), чтобы проверить, правильно ли сформировано содержимое, дважды проверьте, Файл dtd был доступен (браузер) и, наконец, удалил документ XML и dtd в файлы, чтобы проверить, действительно ли содержимое XML.

Ahh, подождите секунду, я думал, что вторым параметром был URI файла DTD, но строка является идентификатором systemId документа xml (public StreamSource(InputStream inputStream, String systemId)). Возможно, проблема - класс StreamSource будет использовать этот URI для разрешения относительных URI (например, DTD).