web-dev-qa-db-fra.com

Le contenu n'est pas autorisé dans Prolog SAXParseException

J'essaie d'appeler un service Web mais je suis confronté à un comportement étrange. nous avons un service Web en cours d'exécution sur mon serveur mais le code ne nous est pas ouvert; nous ne pouvons donc pas voir ce qui se passe derrière le mur. et montrera la réponse à l’essai de test.Cette zone de saisie prend l’entrée dans le format mentionné ci-dessous

<CONTENT>
 <CONTENTID></CONTENTID>
 <DOCUMENTID>DRI2</DOCUMENTID>
 <LOCALECODE>en_US</LOCALECODE>
 <LATEST_VERSION>false</LATEST_VERSION>
 <INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT>
 <ACTIVITY_TYPE></ACTIVITY_TYPE>
</CONTENT>

cela fonctionne bien sur cette interface utilisateur, mais lorsque j'essaie d'appeler ce service Web par le biais de mon code Java, il devient connecté et obtient l'autorisation du service, mais lorsque j'essaie d'appeler la méthode ci-dessus, il me donne le message d'erreur ci-dessous

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

ci-dessous est le code pour générer le XML requis

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>");

et le XML généré est comme ci-dessous

<CONTENT><CONTENTID></CONTENTID><DOCUMENTID>DRI2</DOCUMENTID><LOCALECODE>en_US</LOCALECODE><LATEST_VERSION>false</LATEST_VERSION><INCREASEVIEWCOUNT>false</INCREASEVIEWCOUNT><ACTIVITY_TYPE></ACTIVITY_TYPE></CONTENT>

j'ai même fait le timing de la chaîne générée quelque chose comme ci-dessous 

inputXml.toString().trim().replaceFirst("^([\\W]+)<","<");

mais incapable de savoir ce qui ne va pas, une chose est sûre, il y a un problème dans le XML d'entrée car son travail fonctionne sur la page de test de l'interface utilisateur pour le même XML.

toute aide à cet égard est bien appréciée

43
Umesh Awasthi

Cette erreur est probablement liée à une marque d'ordre de byte (BOM) antérieure au contenu XML réel. Vous devez analyser la chaîne renvoyée et supprimer la nomenclature pour que SAXParser puisse traiter le document correctement. 

Vous trouverez une solution possible ici .

60
weltraumpirat

pour le supprimer simplement, collez votre fichier xml dans le bloc-notes, vous verrez le caractère supplémentaire avant la première balise. Retirez-le et collez-le dans votre fichier - bof

3
phill

Cette erreur peut survenir s'il y a une erreur de validation dans votre fichier wsdl ou xsd. Par exemple, j'ai moi aussi le même problème lors de l'exécution de wsdl2Java pour convertir mon fichier wsdl afin de générer le client . Dans l'un de mes xsd, il était défini comme suit:

<xs:import schemaLocation="" namespace="http://MultiChoice.PaymentService/DataContracts" />

Où schemaLocation était vide. En fournissant les données appropriées dans schemaLocation, j'ai résolu mon problème.

<xs:import schemaLocation="multichoice.paymentservice.DataContracts.xsd" namespace="http://MultiChoice.PaymentService/DataContracts" />
2
biswa

Vérifiez le XML. Ce n'est pas un XML valide. 

Prolog est la première ligne avec les informations de version XML. Il est possible de ne pas l'inclure dans votre code xml. 

Cette erreur est générée lorsque l'analyseur lit une balise non valide au début du document. Normalement où réside le prologue.

par exemple.

  1. Racine /> <document> 
  2. Racine <document> 
2
Sorter

J'ai fait face au même problème. Notre application s'exécutant sur quatre serveurs d'applications et en raison de l'emplacement de schéma non valide mentionné sur l'un des WSDL du service Web, des threads bloqués sont générés sur les serveurs. Les applications ont souvent baissé. Après avoir corrigé l'emplacement du schéma, le problème a été résolu. 

0
Swapnil Galgate