Содержание не допускается в Prolog SAXParserException
Я пытаюсь вызвать веб-сервис, но сталкиваюсь со странным поведением. на моем сервере запущен веб-сервис, но код для нас закрыт, поэтому мы не можем видеть, что происходит за стеной. Владелец сервиса открыл веб-интерфейс тестового клиента, который принимает данные в текстовом поле и отображает ответ на цель тестирования. Это поле ввода принимает данные в указанном ниже формате
<CONTENT>
<CONTENTID></CONTENTID>
<DOCUMENTID>DRI2</DOCUMENTID>
<LOCALECODE>en_US</LOCALECODE>
<LATEST_VERSION>false</LATEST_VERSION>
<INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT>
<ACTIVITY_TYPE></ACTIVITY_TYPE>
</CONTENT>
он хорошо работает на этом пользовательском интерфейсе, но когда я пытаюсь вызвать этот веб-сервис через мой код Java, он подключается, а также авторизуется службой, но когда я пытаюсь вызвать вышеуказанный метод, он выдает мне следующее сообщение об ошибке
AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: org.xml.sax.SAXParseException: Content is not allowed in prolog.
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace: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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
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.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
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)
at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262)
at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87)
at com.inquira.prep.TestWs.main(TestWs.java:13)
{http://xml.apache.org/axis/}hostname:umeshawasthi
org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.axis.AxisFault.makeFault(AxisFault.java:101)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:701)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
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)
at com.inquira.imwows.generated.ContentServicesSoapBindingStub.getContentRecord(ContentServicesSoapBindingStub.java:262)
at com.inquira.prep.GetWebService.getcontentRecord(GetWebService.java:87)
at com.inquira.prep.TestWs.main(TestWs.java:13)
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 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:395)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
... 11 more
ниже приведен код для генерации необходимого XML
inputXml.append("<CONTENT>");
inputXml.append("<CONTENTID>").append("</CONTENTID>");
inputXml.append("<DOCUMENTID>").append("DRI2").append("</DOCUMENTID>");
inputXml.append("<LOCALECODE>").append("en_US").append("</LOCALECODE>");
inputXml.append("<LATEST_VERSION>").append("false").append("</LATEST_VERSION>");
inputXml.append("<INCREASEVIEWCOUNT>").append("false").append("</INCREASEVIEWCOUNT>");
inputXml.append("<ACTIVITY_TYPE>").append("</ACTIVITY_TYPE>");
inputXml.append("</CONTENT>");
и сгенерированный XML, как показано ниже
<CONTENT><CONTENTID></CONTENTID><DOCUMENTID>DRI2</DOCUMENTID><LOCALECODE>en_US</LOCALECODE><LATEST_VERSION>false</LATEST_VERSION><INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT><ACTIVITY_TYPE></ACTIVITY_TYPE></CONTENT>
я даже сделал время сгенерированной строки что-то, как показано ниже
inputXml.toString().trim().replaceFirst("^([\\W]+)<","<");
но не в состоянии выяснить, в чем дело, одна вещь, я уверен, что есть некоторая проблема во входном XML, поскольку его рабочая находка в тестовом пользовательском интерфейсе страницы для того же XML
любая помощь в этом отношении очень ценится
5 ответов
Эта ошибка, вероятно, связана с меткой порядка байтов (BOM) до фактического содержимого XML. Вам необходимо проанализировать возвращенную строку и сбросить спецификацию, чтобы SAXParser мог правильно обработать документ.
Вы найдете возможное решение здесь.
Чтобы просто удалить его, вставьте свой XML-файл в блокнот, вы увидите дополнительный символ перед первым тегом. Удалите его и вставьте обратно в файл - bof
Проверьте XML. Это не действительный XML.
Пролог - это первая строка с информацией о версии XML. Это нормально, чтобы не включать его в свой XML.
Эта ошибка выдается, когда анализатор читает недопустимый тег в начале документа. Обычно там, где проживает пролог.
например
- Root/><документ>
- Корень<документ>
Эта ошибка может появиться, если в вашем файле wsdl или xsd есть ошибка проверки. Например, у меня тоже возникла та же проблема при запуске wsdl2java для преобразования моего файла wsdl для генерации клиента. В одном из моих xsd это было определено как ниже
<xs:import schemaLocation="" namespace="http://MultiChoice.PaymentService/DataContracts" />
Где схема расположения была пуста. Предоставление правильных данных в schemaLocation решило мою проблему.
<xs:import schemaLocation="multichoice.paymentservice.DataContracts.xsd" namespace="http://MultiChoice.PaymentService/DataContracts" />
Я столкнулся с той же проблемой. Наше приложение работает на четырех серверах приложений и из-за неверного расположения схемы, указанного в одном из WSDL веб-службы, на серверах генерируются зависшие потоки. Аппликации снимались часто. После исправления схемы Location, проблема была решена.