2010-12-31 170 views
42

Sto provando a chiamare un servizio Web ma di fronte a uno strano comportamento. abbiamo un servizio web in esecuzione sul mio server ma il codice non è aperto e quindi non possiamo vedere cosa succede dietro il muro Il proprietario del servizio ha esposto l'interfaccia utente del client di test basata sul web che accetta l'input in una casella di testo e mostrano la risposta alla casella di input test purpose.This sta prendendo l'ingresso nel formato di seguito menzionatoIl contenuto non è consentito in 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> 

il suo bel lavoro su questo utente, ma quando sto cercando di chiamare questo servizio web attraverso il mio codice Java la sua sempre collegato come ben ottenendo autorizzato dal servizio ma quando provo a chiamare il metodo sopra mi dà il seguente messaggio di errore

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 

sotto è il codice per generare il XML richiesto

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

e XML generato è come sotto

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

Ho anche fatto temporizzazione della stringa generata qualcosa come sotto

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

ma non sono in grado di scoprire che cosa sta andando storto, una cosa sono sicuro che ci sia qualche problema nell'input XML come il suo working find sull'interfaccia di test della pagina per lo stesso XML

alcun aiuto in questo senso è molto appricated

+0

ottengo questo tipo di messaggio di errore durante il salvataggio di file XML come UTF-8 con BOM. Dove e come si inizializza l'oggetto inputXML? – weltraumpirat

+8

Prova ad aggiungere questo in alto '' –

+1

@ Org.life.java: Ho anche provato questa cosa non ha funzionato :( –

risposta

59

Questo errore è probabilmente legato a un byte order mark (BOM) prima del contenuto XML vero e proprio. È necessario analizzare la stringa restituita ed eliminare la distinta materiali, in modo che SAXParser possa elaborare correttamente il documento.

Troverete una possibile soluzione here.

+3

Ho verificato se questa "distinta base" esistesse visualizzando il mio file in un editor esadecimale. 'ef bb bf' ha segnato il primi 3 byte –

+3

ok ma non c'è un modo per farlo con parser SAX? Dobbiamo rimuovere il BOM da soli, prima di alimentare il SAX (gestore)? –

3

per rimuoverlo semplicemente, incollare il file xml nel blocco note, vedrai il carattere extra prima del primo tag. Rimuovilo & incolla di nuovo nel tuo file - bof

2

Questo errore può arrivare se c'è un errore di validazione nel tuo file wsdl o xsd. Ad esempio, ho anche avuto lo stesso problema durante l'esecuzione di wsdl2java per convertire il mio file wsdl per generare il client. In uno dei miei xsd si è definita come sotto

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

Dove lo schemaLocation era vuoto. Fornendo i dati corretti in schemaLocation risolto il mio problema.

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

Ho affrontato lo stesso problema. La nostra applicazione è in esecuzione su quattro server delle applicazioni e, a causa della posizione dello schema non valida menzionata su uno dei WSDL del servizio Web, i thread appesi sono generati sui server. Le applicazioni si sono abbassate frequentemente. Dopo aver corretto la posizione dello schema, il problema è stato risolto.

2

Controllare l'XML. Non è un xml valido.

Prolog è la prima riga con informazioni sulla versione xml. Va bene non a includilo nel tuo xml.

Questo errore viene generato quando il parser legge un tag non valido all'inizio del documento. Normalmente dove risiede il prologo.

ad es.

  1. Root /> <documento>
  2. Root <documento>
+0

Non è un linguaggio di programmazione Prolog ??? OK, io proprio così totalmente frainteso che "Il contenuto è messaggio "Non permesso in Prolog"! – user2394284

Problemi correlati