org.xml.sax.SAXParseException: содержимое не допускается в prologе

У меня есть клиент веб-службы на основе 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) 

26 Solutions collect form web for “org.xml.sax.SAXParseException: содержимое не допускается в prologе”

Это часто вызвано пробелом перед объявлением XML, но это может быть любой текст , например тире или любой символ. Я часто говорю, что это пустое пространство, потому что люди предполагают, что пустое пространство всегда невежественно, но здесь это не так.


Еще одна вещь, которая часто случается, – это спецификация UTF-8 (знак байтового байта), которая разрешена до того, как объявление XML может рассматриваться как пробел, если документ передается как stream символов в XML-синтаксический анализатор, а не как stream байтов ,

То же самое может произойти, если файлы схемы (.xsd) используются для проверки XML-файла, а один из файлов схемы имеет спецификацию UTF-8 .

Попробуйте добавить пробел между строкой encoding="UTF-8" в prologе и завершением ?> . В XML prolog обозначает этот элемент с разделителем-вопросительным знаком в начале документа (в то время как prolog тега в stackoverflow относится к языку программирования).

Добавлено: Это черта перед вашей prologовой частью документа? Это была бы ошибка там, имея данные перед prologом, -< ?xml version="1.0" encoding="UTF-8"?> .

На самом деле в дополнение к Почте Юрия Зубарева

Когда вы передаете несуществующий XML-файл в парсер. Например, вы проходите

 new File("C:/temp/abc") 

когда в вашей файловой системе существует только файл C: /temp/abc.xml

В любом случае

 builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); document = builder.parse(new File("C:/temp/abc")); 

или

 DOMParser parser = new DOMParser(); parser.parse("file:C:/temp/abc"); 

Все они дают одинаковое сообщение об ошибке.

Очень неутешительная ошибка, потому что следующая трассировка

 javax.servlet.ServletException at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) ... Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog. ... 40 more 

ничего не говорит о том, что «имя файла неверно» или «такой файл не существует». В моем случае у меня был абсолютно правильный xml-файл, и мне пришлось потратить 2 дня, чтобы определить реальную проблему.

Это означает, что XML некорректен, или тело ответа вообще не является документом XML.

У меня была та же проблема (и решена ее), пытаясь разобрать XML-документ с помощью freemarker.

У меня не было пробелов перед заголовком файла XML.

Проблема возникает тогда и только тогда, когда кодировка файла и атрибут кодирования XML различны. (например: файл UTF-8 с атрибутом UTF-16 в заголовке).

Поэтому у меня было два пути решения проблемы:

  1. изменение кодировки самого файла
  2. изменение заголовка UTF-16 на UTF-8

Просто потратил 4 часа на поиск аналогичной проблемы в WSDL. Оказывается, WSDL использует XSD, который импортирует другое пространство XSD пространства имен. Этот импортированный XSD содержит следующее:

 < ?xml version="1.0" encoding="UTF-8"?>    < .... 

Обратите внимание на пустой элемент include ! Это был корень моих беды. Я думаю, что это вариация в файле Egor, не найденная выше.

+1 к разочаровывающей отчетности об ошибках.

В моем случае удаление атрибута ‘encoding =’ UTF-8 ” полностью сработало.

Это похоже на проблему с кодировкой набора символов, возможно потому, что ваш файл не находится в UTF-8.

Мой ответ не помог бы вам, возможно, но он помогает в этой проблеме в целом.

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

Удалите их, и ваш xml будет проанализирован.

Если все остальное не удается, откройте файл в двоичном формате, чтобы убедиться, что в начале файла нет смешных символов [3 непечатаемых символа в начале файла, которые идентифицируют файл как utf-8]. Мы это сделали и нашли. поэтому мы преобразовали файл с utf-8 в ascii, и он сработал.

По тем же вопросам я удалил следующую строку,

  File file = new File("c:\\file.xml"); InputStream inputStream= new FileInputStream(file); Reader reader = new InputStreamReader(inputStream,"UTF-8"); InputSource is = new InputSource(reader); is.setEncoding("UTF-8"); 

Он работает нормально. Не так уверен, почему этот UTF-8 дает проблемы. Чтобы держать меня в шоке, он отлично работает и для UTF-8.

Я использую 32-битную Windows-7 и NetBeans IDE с Java * jdk1.6.0_13 *. Не знаю, как это работает.

Как уже указывал Майк Соколов, одной из возможных причин является наличие некоторого символа / s (например, пробела) перед тегом.

Если ваш входной XML читается как строка (в отличие от байтового массива), вы можете использовать вместо строки ввода код ниже, чтобы убедиться, что все «ненужные» символы перед тегом xml стираются.

 inputXML=inputXML.substring(inputXML.indexOf("< ?xml")); 

Вы должны быть уверены, что входной XML-файл начинается с тега xml.

Я выполнил инструкции, найденные здесь, и я получил ту же ошибку.

Я попробовал несколько вещей для его решения (например, изменение кодировки, ввод XML-файла, а не копирование в него) в Блокноте и Блокноте XML, но ничего не получилось.

Проблема была решена, когда я редактировал и сохранял свой XML-файл в Notepad ++ (кодирование -> utf-8 без спецификации)

Для всех тех, кто получает эту ошибку: ПРЕДУПРЕЖДЕНИЕ: Catalina.start с использованием conf / server.xml: Содержимое не допускается в prologе.

Не очень информативно .. но на самом деле это означает, что в файле conf / server.xml есть мусор.

Я видел эту точную ошибку в других файлах XML. Эта ошибка может быть вызвана внесением изменений в текстовый редактор, который вводит мусор.

То, как вы можете проверить, есть ли у вас мусор в файле, – это открыть его с помощью «Редактора HEX». Если вы видите какой-либо символ перед этой строкой

  "< ?xml version="1.0" encoding="UTF-8"?>" 

вроде бы это мусор

  "‰ŠŒ< ?xml version="1.0" encoding="UTF-8"?>" 

это ваша проблема … Решение состоит в том, чтобы использовать хороший редактор HEX. Тот, который позволит вам сохранять файлы с различными типами кодирования.

Затем просто сохраните его как UTF-8. Некоторым системам, использующим XML-файлы, может потребоваться его сохранение в виде UTF NO BOM. Это означает, что с «NO Bate Order Mark»

Надеюсь, это поможет кому-то там!

В моем случае web.xml в моем приложении имеет дополнительное пространство даже после того, как я удалил, не работал, мне пришлось отменить chages и его исправления, и да, я играл с logging.properties и web.xml в моем tomcat, но даже после того, как я вернул ошибка сохранилась, так что это исправлено)).

дополнительное пространство

Чтобы быть конкретным, я попытался сделать добавление org.apache.catalina.filters.ExpiresFilter.level = FINE stack over flow что-то о logging.properties

Еще одна мысль об этом в будущем. Получение этой ошибки может быть случайным, когда вы просто удаляете ключ удаления или какой-либо другой случай, когда у них есть окно 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 Webservice. При создании формата XML String я заменил & lt и & gt; с помощью < и>, тогда ошибка погасла, и я получил правильный ответ. Не знаю, как это работает, но это сработало.

образец :

 String body = "" +sum +""; 

Я была такая же проблема.

Сначала я загрузил XML-файл на локальный рабочий стол, и я получил Content is not allowed in prolog во время импорта файла на сервер портала. Даже визуальный файл выглядел хорошо для меня, но как-то он был поврежден.

Поэтому я повторно загружаю тот же файл и пробовал то же самое, и он работал.

В последнее время у нас была та же проблема, и оказалось, что это был плохой URL-адрес и, следовательно, стандартный HTTP-ответ 403 (который, очевидно, не является правильным XML-адресом, который ищет клиент). Я собираюсь поделиться деталями, если кто-то из тех же контекстов столкнется с этой проблемой:

Это было веб-приложение на основе Spring, в котором компонент «JaxWsPortProxyFactoryBean» был настроен для предоставления прокси для удаленного порта.

  

«END_POINT_BASE_URL» – это переменная среды, настроенная в «setenv.sh» экземпляра Tomcat, на котором размещено веб-приложение. Содержимое файла выглядит примерно так:

 export END_POINT_BASE_URL="http://localhost:9001/BusinessAppServices" #export END_POINT_BASE_URL="http://localhost:8765/BusinessAppServices" 

Пропавшее “;” после того, как каждая строка вызвала неверный URL и, следовательно, плохой ответ. То есть вместо «BusinessAppServices / OurService? Wsdl» URL имел CR перед «/». «Монитор TCP / IP» был весьма удобен при устранении неполадок.

В моем случае я получил эту ошибку, потому что API, который я использовал, мог возвращать данные либо в формате XML, либо в формате JSON. Когда я тестировал его с помощью браузера, он по умолчанию использовал формат XML, но когда я вызывал один и тот же вызов из приложения Java, API возвращал отформатированный ответ JSON, который, естественно, вызывал ошибку синтаксического анализа.

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

Исправление: просто откройте файл в текстовом редакторе (проверен на Sublime text), удалите любой отступ, если он есть в файле, и скопируйте все содержимое файла в новый файл и сохраните его. Это оно!. Когда я запускал новый файл, он работал без каких-либо ошибок синтаксического анализа.

Я взял код Dineshkumar и модифицировал его для правильной проверки файла XML:

 import org.apache.log4j.Logger; public class Myclass{ private static final Logger LOGGER = Logger.getLogger(Myclass.class); /** * Validate XML file against Schemas XSD in pathEsquema directory * @param pathEsquema directory that contains XSD Schemas to validate * @param pathFileXML XML file to validate * @throws BusinessException if it throws any Exception */ public static void validarXML(String pathEsquema, String pathFileXML) throws BusinessException{ String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema"; String nameFileXSD = "file.xsd"; String MY_SCHEMA1 = pathEsquema+nameFileXSD); ParserErrorHandler parserErrorHandler; try{ SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA); Source [] source = { new StreamSource(new File(MY_SCHEMA1)) }; Schema schemaGrammar = schemaFactory.newSchema(source); Validator schemaValidator = schemaGrammar.newValidator(); schemaValidator.setErrorHandler( parserErrorHandler= new ParserErrorHandler()); /** validate xml instance against the grammar. */ File file = new File(pathFileXML); InputStream isS= new FileInputStream(file); Reader reader = new InputStreamReader(isS,"UTF-8"); schemaValidator.validate(new StreamSource(reader)); if(parserErrorHandler.getErrorHandler().isEmpty()&& parserErrorHandler.getFatalErrorHandler().isEmpty()){ if(!parserErrorHandler.getWarningHandler().isEmpty()){ LOGGER.info( String.format("WARNING validate XML:[%s] Descripcion:[%s]", pathFileXML,parserErrorHandler.getWarningHandler())); }else{ LOGGER.info( String.format("OK validate XML:[%s]", pathFileXML)); } }else{ throw new BusinessException( String.format("Error validate XML:[%s], FatalError:[%s], Error:[%s]", pathFileXML, parserErrorHandler.getFatalErrorHandler(), parserErrorHandler.getErrorHandler())); } } catch(SAXParseException e){ throw new BusinessException(String.format("Error validate XML:[%s], SAXParseException:[%s]", pathFileXML,e.getMessage()),e); } catch (SAXException e){ throw new BusinessException(String.format("Error validate XML:[%s], SAXException:[%s]", pathFileXML,e.getMessage()),e); } catch (IOException e) { throw new BusinessException(String.format("Error validate XML:[%s], IOException:[%s]",pathFileXML,e.getMessage()),e); } } } 

Задайте документ таким образом:

 < ?xml version="1.0" encoding="UTF-8" ?>  %children%  

Иногда это код, а не XML

Следующий код,

 Document doc = dBuilder.parse(new InputSource(new StringReader("file.xml"))); 

также приведет к этой ошибке,

[Fatal Error]: 1: 1: Содержимое не разрешено в proog.org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Содержание не доступно в prologе.

потому что он пытается проанализировать строковый литерал "file.xml" (а не содержимое файла file.xml ) и не "file.xml" потому что "file.xml" в виде строки не является корректным XML.

Исправить: Удалить StringReader() :

 Document doc = dBuilder.parse(new InputSource("file.xml")); 

Аналогичным образом, проблемы с грязным буфером могут оставить остаточный мусор перед фактическим XML. Если вы тщательно проверили свой XML и все еще получаете эту ошибку, запишите точное содержимое, передаваемое парсеру; иногда то, что на самом деле (попробовали быть) разобрано, удивительно.

У меня была такая же проблема с весной

MarshallingMessageConverter

и кодом предварительной обработки.

Майби кому-то понадобится причина: BytesMessage #readBytes – чтение байтов .. и я забыл, что чтение – операция одного направления. Вы не можете прочитать дважды.

Попробуйте использовать BOMInputStream в apache.commons.io:

 public static  T getContent(Class instance, SchemaType schemaType, InputStream stream) throws JAXBException, SAXException, IOException { JAXBContext context = JAXBContext.newInstance(instance); Unmarshaller unmarshaller = context.createUnmarshaller(); Reader reader = new InputStreamReader(new BOMInputStream(stream), "UTF-8"); JAXBElement entry = unmarshaller.unmarshal(new StreamSource(reader), instance); return entry.getValue(); } 

Сначала очистите проект, а затем перестройте проект. Я также столкнулся с той же проблемой. После этого все получилось.

  • как игнорировать пространства имен с XPath
  • Почему XML :: Simple «Disouraged»?
  • XSD - как разрешить элементы в любом порядке сколько угодно раз?
  • XSLT: как преобразовать XML-узел в строку
  • Можем ли мы импортировать XML-файл в другой файл XML?
  • Как связать XML с XSD с помощью schemaLocation или noNamespaceSchemaLocation?
  • Использование пользовательского шрифта в Android
  • Как сгенерировать образцы XML-документов из их DTD или XSD?
  • Разделить столбец Excel с XML внутри
  • Использование XSL-FO, CSS3 вместо CSS2 для создания разбитых на страницы документов, таких как PDF?
  • Удаление узлов из XmlDocument
  • Давайте будем гением компьютера.