org.xml.sax.SAXParseException: Content is not allowed in prolog
org.xml.sax.SAXParseException: Содержимое не разрешено в prolog
У меня есть клиент веб-службы на базе Java, подключенный к веб-службе Java (реализованный на платформе Axis1 framework).
Я получаю следующее исключение в моем файле журнала:
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog. at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source) at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source) at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source) at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(Unknown Source) at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227) at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696) at org.apache.axis.Message.getSOAPEnvelope(Message.java:435) at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114) at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32) at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118) at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83) at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198) at org.apache.axis.client.Call.invokeEngine(Call.java:2784) at org.apache.axis.client.Call.invoke(Call.java:2767) at org.apache.axis.client.Call.invoke(Call.java:2443) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812)
Переведено автоматически
Ответ 1
Часто это вызвано пробелом перед объявлением XML, но это может быть любой текст, например, тире или любой символ. Я говорю, что это часто вызвано пробелами, потому что люди предполагают, что пробелы всегда игнорируются, но здесь это не так.
Еще одна вещь, которая часто случается, - это спецификация UTF-8 (метка порядка байтов), которая допускается до того, как XML-объявление может обрабатываться как пробел, если документ передается в виде потока символов анализатору XML, а не в виде потока байтов.
То же самое может произойти, если файлы схемы (.xsd) используются для проверки XML-файла, и один из файлов схемы имеет спецификацию UTF-8.
Ответ 2
Фактически в дополнение к сообщению Юрия Зубарева
Когда вы передаете несуществующий XML-файл в parser. Например, вы передаете
newFile("C:/temp/abc")
когда в вашей файловой системе существует только C:/temp/abc.xml файл
Очень разочаровывающая ошибка, потому что следующая трассировка
javax.servlet.ServletException at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) ... Caused by: org.xml.sax.SAXParseException: Content isnot allowed in prolog. ... 40 more
ничего не говорит о факте "неправильное имя файла" или "такой файл не существует". В моем случае у меня был абсолютно правильный XML-файл, и мне пришлось потратить 2 дня, чтобы определить реальную проблему.
Ответ 3
Попробуйте добавить пробел между encoding="UTF-8" строкой в prolog и завершающей ?>. В XML prolog обозначает этот элемент, разделенный вопросительным знаком в скобках, в начале документа (в то время как тег prolog в stackoverflow ссылается на язык программирования).
Добавлено: это тире перед вашей частью prolog документа? Это было бы ошибкой, если бы данные находились перед prolog, -<?xml version="1.0" encoding="UTF-8"?>.
Ответ 4
У меня была такая же проблема (и я решил ее) при попытке проанализировать XML-документ с помощью freemarker.
У меня не было пробелов перед заголовком XML-файла.
Проблема возникает тогда и только тогда, когда кодировка файла и атрибут XML encoding различны. (например: файл UTF-8 с атрибутом UTF-16 в заголовке).