У меня есть клиент веб-службы на основе Java, подключенный к веб-службе Java (реализован на платформе Axis1).
Я получаю следующее исключение в моем файле журнала:
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)
Ответы:
Это часто вызывается пробелом перед объявлением XML, но это может быть любой текст , например тире или любой символ. Я часто говорю, что это вызвано пустым пространством, потому что люди предполагают, что белое пространство всегда игнорируется, но здесь это не так.
Другое дело , что часто происходит это UTF-8 BOM (порядок байт знак), который будет разрешен до декларации XML можно рассматривать как пробел , если документ передается в виде потока символов в XML - парсер , а не как поток байт ,
То же самое может произойти, если файлы схемы (.xsd) используются для проверки XML-файла, а один из файлов схемы имеет спецификацию UTF-8 .
источник
Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))
наDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
Собственно в дополнение к посту Юрия Зубарева
Когда вы передаете несуществующий XML-файл в анализатор. Например, вы проходите
если в вашей файловой системе существует только файл C: /temp/abc.xml
В любом случае
или
Все выдают одно и то же сообщение об ошибке.
Очень неутешительная ошибка, потому что следующий след
ничего не говорится о факте «имя файла неверно» или «такого файла не существует». В моем случае у меня был абсолютно правильный файл XML, и мне пришлось потратить 2 дня, чтобы определить настоящую проблему.
источник
Попробуйте добавить пробел между
encoding="UTF-8"
строкой в прологе и завершением?>
. В XML пролог обозначает этот элемент с разделителями-скобками в начале документа (в то время как пролог тега в stackoverflow ссылается на язык программирования).Добавлено: Это черта перед вашей прологовой частью документа? Это было бы ошибкой, имея данные перед прологом
-<?xml version="1.0" encoding="UTF-8"?>
.источник
<?xml ver...
биту.У меня была такая же проблема (и я решил ее) при попытке проанализировать документ XML с помощью freemarker.
У меня не было пробелов перед заголовком файла XML.
Проблема возникает тогда и только тогда, когда кодировка файла и атрибут кодировки XML различаются. (например: файл UTF-8 с атрибутом UTF-16 в заголовке).
Итак, у меня было два способа решения проблемы:
источник
Это означает, что XML искажен или тело ответа вообще не является документом XML.
источник
Просто потратил 4 часа на поиск аналогичной проблемы в WSDL. Оказывается, WSDL использовал XSD, который импортирует другое пространство имен XSD. Этот импортированный XSD содержал следующее:
Обратите внимание на пустой
include
элемент! Это был корень моих бед. Я полагаю, что это проблема файла Егора, не найденная выше.+1 к неутешительным сообщениям об ошибках.
источник
В моем случае удаление атрибута 'encoding = "UTF-8" в целом сработало.
Это похоже на проблему кодировки набора символов, возможно, потому что ваш файл на самом деле не в UTF-8.
источник
Мой ответ не поможет вам, вероятно, но это поможет с этой проблемой в целом.
Когда вы видите такого рода исключения, вы должны попытаться открыть свой XML-файл в любом Hex-редакторе, и иногда вы можете увидеть дополнительные байты в начале файла, которые текстовый редактор не показывает.
Удалите их, и ваш xml будет проанализирован.
источник
Иногда это код, а не XML
Следующий код,
также приведет к этой ошибке,
потому что он пытается проанализировать строковый литерал
"file.xml"
(а не содержимоеfile.xml
файла) и потерпел неудачу, потому что"file.xml"
в качестве строки неправильно сформирован XML.Исправить: Удалить
StringReader()
:Точно так же проблемы с грязным буфером могут оставить остаточный мусор впереди фактического XML. Если вы тщательно проверили свой XML и все еще получаете эту ошибку, запишите точное содержимое, передаваемое парсеру; иногда то, что на самом деле (пытались) проанализировать, удивляет.
источник
applicaionContext.xml
путь в коде и не проверял код, искал ошибку только в XML-файлеСначала очистите проект, затем пересоберите проект. Я также столкнулся с той же проблемой. После этого все стало хорошо.
источник
Если ничего не помогло, откройте файл в двоичном формате, чтобы убедиться, что в начале файла нет забавных символов [3 непечатаемых символа, которые идентифицируют файл как utf-8] в начале файла. Мы сделали это и нашли. поэтому мы конвертировали файл из utf-8 в ascii, и это сработало.
источник
По тем же вопросам я удалил следующую строку:
Работает нормально. Не уверен, почему этот UTF-8 дает проблемы. Чтобы держать меня в шоке, он прекрасно работает и для UTF-8.
Я использую 32-битную Windows-7 и IDE Netbeans с Java * jdk1.6.0_13 *. Понятия не имею, как это работает.
источник
Как уже указал Майк Соколов, одной из возможных причин является наличие некоторых символов (например, пробела) перед тегом.
Если ваш входной XML читается как строка (в отличие от байтового массива), вы можете заменить входную строку приведенным ниже кодом, чтобы убедиться, что все «ненужные» символы перед тегом xml удалены.
Вы должны быть уверены, что входной XML начинается с тега xml.
источник
В моем случае web.xml в моем приложении имеет дополнительное пространство, даже после того, как я удалил, не работал, мне пришлось отменить изменения и их исправления, и да, я играл с logging.properties и web.xml в моем tomcat, но даже после того, как я отменил ошибка продолжала показывать, так что это исправило это)).
Чтобы быть конкретным, я попытался сделать добавление org.apache.catalina.filters.ExpiresFilter.level = FINE стек через поток что-то о logging.properties
источник
Я следовал инструкциям, найденным здесь, и я получил ту же ошибку.
Я попытался решить несколько вещей (например, изменить кодировку, набрать XML-файл, а не вставить его и т. Д.) В Notepad и XML Notepad, но ничего не получалось.
Проблема была решена, когда я редактировал и сохранял свой XML-файл в Notepad ++ (кодировка -> utf-8 без спецификации)
источник
Для всех тех, кто получает эту ошибку: ПРЕДУПРЕЖДЕНИЕ: Catalina.start с использованием conf / server.xml: содержимое не разрешено в прологе.
Не очень информативно ... но на самом деле это означает, что в вашем файле conf / server.xml есть мусор.
Я видел эту точную ошибку в других файлах XML ... эта ошибка может быть вызвана внесением изменений в текстовом редакторе, который вводит мусор.
Чтобы проверить, есть ли у вас мусор в файле, нужно открыть его с помощью «HEX-редактора». Если перед этой строкой вы видите какой-либо символ
как это было бы мусором
это ваша проблема .... Решение состоит в том, чтобы использовать хороший редактор HEX .. Тот, который позволит вам сохранять файлы с различными типами кодирования ..
Затем просто сохраните его как UTF-8. Некоторым системам, которые используют файлы XML, может потребоваться его сохранение в формате UTF NO BOM, что означает «NO Byte Order Mark»
Надеюсь, это поможет кому-то там !!
источник
Для меня Build-> Clean исправил все!
источник
Чтобы исправить проблему спецификации в системах Unix / Linux:
Проверьте, есть ли нежелательный символ спецификации:
hexdump -C myfile.xml | more
нежелательный символ спецификации появится в начале файла как...<?xml>
Или сделать
file myfile.xml
. Файл с символом спецификации будет выглядеть следующим образом:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text
Исправить один файл с помощью:
tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml
Повторите 1 или 2, чтобы проверить, что файл был очищен. Вероятно, также имеет смысл сделать,
view myfile.xml
чтобы проверить содержание остались.Вот скрипт bash для очистки всей папки XML-файлов:
источник
Просто дополнительная мысль об этом на будущее. Получение этой ошибки может быть в том случае, если просто ударить ключ удаления или какой-либо другой ключ случайным образом, когда они имеют окно XML в качестве активного отображения и не обращают внимания. Это уже случалось со мной с файлом struts.xml в моем веб-приложении. Неуклюжие локти ...
источник
Я тоже получал то же самое
XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.
, когда мое приложение создавало ответ XML для вызова веб-службы RestFull. При создании XML-формата String я заменил & lt и & gt на <и>, затем ошибка исчезла, и я получил правильный ответ. Не уверен, как это работает, но это работает.
образец :
источник
Я была такая же проблема.
Сначала я скачал файл XML на локальный рабочий стол и получил
Content is not allowed in prolog
во время импорта файла на сервер портала. Даже визуально файл выглядел хорошо для меня, но каким-то образом он был поврежден.Поэтому я повторно загрузил тот же файл и попробовал то же самое, и это сработало.
источник
Недавно у нас была такая же проблема, и это оказалось в случае неправильного URL и, следовательно, стандартного ответа HTTP 403 (который, очевидно, не является действительным XML, который искал клиент). Я собираюсь поделиться подробностями на случай, если кто-то в том же контексте столкнется с этой проблемой:
Это было веб-приложение на основе Spring, в котором bean-компонент JaxWsPortProxyFactoryBean был настроен для предоставления прокси для удаленного порта.
«END_POINT_BASE_URL» - это переменная среды, настроенная в «setenv.sh» экземпляра Tomcat, в котором размещается веб-приложение. Содержимое файла выглядит примерно так:
Пропавшее ";" после каждой строки вызываются неверно сформированные URL и, следовательно, плохой ответ. То есть, вместо «BusinessAppServices / OurService? Wsdl» перед URL-адресом был символ «/». «TCP / IP Monitor» был очень удобен при устранении неполадок.
источник
В моем случае я получил эту ошибку, потому что API, который я использовал, мог возвращать данные в формате XML или в формате JSON. Когда я тестировал его с помощью браузера, по умолчанию использовался формат XML, но когда я вызвал тот же вызов из приложения Java, API вернул ответ в формате JSON, который, естественно, вызвал ошибку синтаксического анализа.
источник
Даже я столкнулся с подобной проблемой. Причиной был какой-то мусорный символ в начале файла.
Исправление: просто откройте файл в текстовом редакторе (проверено на возвышенном тексте), удалите любой отступ, если таковой имеется в файле, и скопируйте, вставьте все содержимое файла в новый файл и сохраните его. Это оно!. Когда я запустил новый файл, он работал без ошибок синтаксического анализа.
источник
Я взял код Dineshkumar и изменил, чтобы правильно проверить мой XML-файл:
источник
Настройте ваш документ так:
источник
У меня была такая же проблема с весной
и по коду предварительной обработки.
Может кому-то понадобится причина: BytesMessage #readBytes - чтение байтов ... и я забыл, что чтение - это операция в одном направлении. Вы не можете читать дважды.
источник
Попробуйте использовать BOMInputStream в apache.commons.io:
источник
У меня была такая же проблема при разборе
info.plist
файла на моем Mac. Однако проблема была устранена с помощью следующей команды, которая превратила файл в XML.Надеюсь, что это помогает кому-то.
источник
У меня была такая же проблема с некоторыми XML-файлами, я решил прочитать файл с кодировкой ANSI (Windows-1252) и написать файл с кодировкой UTF-8 с помощью небольшого скрипта на Python. Я пытался использовать Notepad ++, но у меня не было успеха:
источник