При парсинге XML-файла на Java я получаю ошибку:
An invalid XML character (Unicode: 0x0) was found in the element content of the document.
xml прибывает из веб-сервиса.
Проблема состоит в том, что я получаю ошибку только, когда веб-сервис работает на localhost (windows+tomcat), но не, когда веб-сервис онлайн (linux+tomcat).
Как я могу заменить недопустимый символ?? Спасибо.
исправлено с помощью этого кода:
String cleanXMLString = null;
Pattern pattern = null;
Matcher matcher = null;
pattern = Pattern.compile("[\\000]*");
matcher = pattern.matcher(dirtyXMLString);
if (matcher.find()) {
cleanXMLString = matcher.replaceAll("");
}
Символ Unicode 0x0
представляет NULL
, что означает, что данные, которые вы извлекаете, содержат где-то NULL (что не допускается в XML и отсюда ваша ошибка).
Убедитесь, что вы выяснили причину появления NULL в первую очередь.
Кроме того, как вы взаимодействуете с WebService? Если вы используете Axis, убедитесь, что в WSDL указана кодировка для ввода и вывода данных.
Это проблема кодировки. Либо вы читаете входной поток как UTF8, а это не так, либо наоборот.
Вы должны явно указать кодировку при чтении содержимого. Например, через
new InputStreamReader(getInputStream(), "UTF-8")
Другая проблема может быть связана с tomcat. Попробуйте добавить URIEncoding="UTF-8" в настройках коннектора вашего tomcat в файле server.xml. Потому что:
Оказалось, что в спецификации JSP сказано, что если кодировка страниц JSP не объявлена явно, то следует использовать ISO-8859-1 (!).
Взято из здесь.
Немного поискав вокруг, выяснилось, что 0x0 - это нулевой символ, у кого-то еще была такая же проблема с XML и нулевыми символами здесь http://forums.sun.com/thread.jspa?threadID=579849. Не уверен, как вы разбираете XML, но если вы сначала получите его как строку, то здесь http://forums.sun.com/thread.jspa?threadID=628189 можно обсудить, как заменить нулевой символ.