Игнорирование "Содержимое не допускается в конце раздела" SAXException - PullRequest
7 голосов
/ 12 мая 2010

Я использую Java DocumentBuilder.parse(InputStream) для анализа XML-документа. Иногда я получаю неправильно сформированные XML-документы, потому что после последнего > возникает дополнительный мусор, который вызывает SAXException: Content is not allowed in trailing section. (В случаях, которые я видел, мусор - это просто один или несколько нулевых байтов.)

Мне все равно, что после финала >. Есть ли простой способ проанализировать весь XML-документ в Java и игнорировать его в конце?

Обратите внимание, что под "игнорировать" я не имею в виду просто поймать и проигнорировать исключение: я имею в виду игнорировать завершающий мусор, не выбрасывать исключение и возвращать объект Document, поскольку XML вплоть до окончательный > действителен.

Ответы [ 2 ]

8 голосов
/ 12 мая 2010

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

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

Если проблема сложнее, чем просто нулевые символы, вам, конечно, понадобится более сложный фильтр, который может быть трудным.

Если вы используете ContentHandler, вы можете добавить к нему обратный вызов, чтобы он мог сообщить вызывающему коду, когда обработан конечный корневой тег, и, основываясь на этом знании, вызывающий код может иметь логику в его обработчик для исключения, чтобы просто игнорировать его, если конец был сигнализирован. На этом этапе все, что должно было быть сделано парсером, вероятно, все равно было сделано! Но, похоже, это решение не подходит для вашей ситуации.

0 голосов
/ 12 мая 2010

Нет. Документ, который содержит завершающие символы, не является документом XML. Исправить отправителя.

...