Ошибка о недопустимых символах XML на Java - PullRequest
14 голосов
/ 02 марта 2010

При анализе XML-файла на Java я получаю сообщение об ошибке:

An invalid XML character (Unicode: 0x0) was found in the element content of the document.

xml поступает из веб-службы.

Проблема в том, что я получаю сообщение об ошибке только тогда, когда веб-служба работает на локальном хосте (windows + tomcat), но не когда веб-служба работает в сети (linux + tomcat).

Как я могу заменить недействительный символ ?? Благодаря.

Ответы [ 4 ]

14 голосов
/ 02 марта 2010

Unicode символ 0x0 представляет NULL, означая, что данные, которые вы извлекаете, содержат NULL где-то (что недопустимо в XML и, следовательно, ваша ошибка).

Убедитесь, что вы выясняете, что вызывает NULL в первую очередь.

Кроме того, как вы взаимодействуете с WebService? Если вы используете Axis, убедитесь, что для WSDL определена какая-то кодировка, указанная для входных и выходных данных.

7 голосов
/ 02 марта 2010

исправлено с помощью этого кода:

String cleanXMLString = null;
Pattern pattern = null;
Matcher matcher = null;
pattern = Pattern.compile("[\\000]*");
matcher = pattern.matcher(dirtyXMLString);
if (matcher.find()) {
   cleanXMLString = matcher.replaceAll("");
}
4 голосов
/ 02 марта 2010

Это проблема с кодировкой. Либо вы читаете входной поток как UTF8, а это не так, или наоборот.

Вы должны явно указать кодировку при чтении содержимого. Например. через

new InputStreamReader(getInputStream(), "UTF-8")

Еще одной проблемой может быть кот. Попробуйте добавить URIEncoding = "UTF-8" в настройках соединителя вашего кота в файле server.xml. Потому что:

Оказалось, что спецификация JSP гласит, что если кодировка страниц страниц JSP явно не объявлена, то следует использовать ISO-8859-1 (!).

Взято из здесь .

0 голосов
/ 02 марта 2010

Немного оглядываясь, обнаруживает, что 0x0 является нулевым символом, у кого-то еще была такая же проблема с XML и нулевыми символами здесь http://forums.sun.com/thread.jspa?threadID=579849. Не уверен, как вы анализируете XML, но если вы получаете его как строку Сначала здесь обсуждается, как заменить нуль http://forums.sun.com/thread.jspa?threadID=628189.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...