org.xml.sax.SAXParseException: содержимое не разрешено в прологе - PullRequest
145 голосов
/ 28 февраля 2011

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

Ответы [ 29 ]

0 голосов
/ 04 апреля 2019

У меня возникла та же проблема при разборе файла info.plist на моем Mac. Однако проблема была исправлена ​​с помощью следующей команды, которая превратила файл в XML.

plutil -convert xml1 info.plist

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 18 ноября 2014

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

0 голосов
/ 27 сентября 2011

Настройте документ так:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    %children%
</root>
0 голосов
/ 12 сентября 2013

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

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

<bean id="ourPortJaxProxyService"
    class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"
    p:serviceInterface="com.amir.OurServiceSoapPortWs"
    p:wsdlDocumentUrl="${END_POINT_BASE_URL}/OurService?wsdl"
    p:namespaceUri="http://amir.com/jaxws" p:serviceName="OurService"
    p:portName="OurSoapPort" />

«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-адресе раньше был символ «/».«TCP / IP Monitor» был очень удобен при устранении проблемы.

0 голосов
/ 24 февраля 2012

Просто дополнительная мысль об этом на будущее. Получение этой ошибки может быть в том случае, если кто-то просто ударит ключ удаления или какой-либо другой ключ случайным образом, когда у него есть окно XML в качестве активного дисплея и он не обращает внимания. Это уже случалось со мной с файлом struts.xml в моем веб-приложении. Неуклюжие локти ...

0 голосов
/ 07 декабря 2018

Для меня Build-> Clean исправил все!

0 голосов
/ 22 февраля 2016

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

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

0 голосов
/ 27 марта 2016

Я взял код 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);
	}
	
}

}
0 голосов
/ 29 августа 2012

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

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

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

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