2010-12-31 28 views
42

Estoy intentando llamar a un servicio web pero tengo un comportamiento extraño. tenemos un servicio web ejecutándose en mi servidor pero el código no está abierto para nosotros, así que no podemos ver lo que ocurre detrás de la pared El propietario del servicio ha expuesto la interfaz de usuario del cliente de prueba que toma entrada en un cuadro de texto y lo hará muestra la respuesta a la caja de entrada de las pruebas fin.Este está tomando la entrada en el formato mencionado a continuaciónEl contenido no está permitido en 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> 

su trabajo muy bien en esta interfaz de usuario, pero cuando estoy tratando de llamar a este servicio web a través de mi código java su conseguir el contacto como bien al ser autorizado por el servicio pero cuando trato de llamar al método anterior me da el siguiente mensaje de error

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 

a continuación es el código para generar el XML necesario

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

y el XML generado es la siguiente

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

i siquiera hice el momento de la cadena de algo generada como a continuación

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

pero incapaz de averiguar qué está yendo mal, una cosa estoy seguro de que hay algún problema en el XML de entrada como resultado de trabajo en la interfaz de usuario de la página de prueba para el mismo XML

cualquier ayuda en este sentido se appricated mucho

+0

consigo este tipo de mensaje de error al guardar archivos XML como UTF-8 con la lista de materiales. ¿Dónde y cómo se inicializa el objeto inputXML? – weltraumpirat

+8

Intenta agregar esto en la parte superior '' –

+1

@ Org.life.java: También probé esto, nada funcionó :( –

Respuesta

59

Este error está probablemente relacionado con una marca de orden de bytes (BOM) con anterioridad al contenido real XML. Necesita analizar la cadena devuelta y descartar la lista de materiales, de modo que SAXParser pueda procesar el documento correctamente.

Encontrará una posible solución here.

+3

Comprobé si esta "BOM" existía al ver mi archivo en un editor hexadecimal. 'ef bb bf' marcó el primeros 3 bytes –

+3

bien, pero ¿no hay forma de hacer esto con el analizador SAX? ¿Tenemos que eliminar el BOM nosotros mismos, antes de alimentar el SAX (controlador)? –

3

para simplemente eliminarlo, pegue su archivo xml en el bloc de notas, verá el carácter adicional antes de la primera etiqueta. Quítelo & pegue de nuevo en su archivo - bof

2

Este error puede venir si hay un error de validación en su archivo wsdl o xsd. Por ejemplo, yo también tuve el mismo problema al ejecutar wsdl2java para convertir mi archivo wsdl para generar el cliente. En uno de mis xsd que se definió como más adelante

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

Cuando el schemaLocation estaba vacío. Al proporcionar los datos adecuados en schemaLocation resolvió mi problema.

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

Tuve el mismo problema. Nuestra aplicación se ejecuta en cuatro servidores de aplicaciones y debido a una ubicación de esquema no válida mencionada en uno de los WSDL del servicio web, los hilos colgados se generan en los servidores. Las aplicaciones descendieron con frecuencia. Después de corregir la Ubicación del esquema, se resolvió el problema.

2

Compruebe el XML. No es un xml válido.

Prolog es la primera línea con información de versión xml. Está bien no incluirlo en su xml.

Este error se produce cuando el analizador lee una etiqueta no válida al comienzo del documento. Normalmente donde reside el prólogo.

p. Ej.

  1. Raíz /> <documento>
  2. Raíz <documento>
+0

¿No es Prolog un lenguaje de programación? OK, yo solo totalmente malentendido que "el contenido es no permitido en el mensaje Prolog " – user2394284

Cuestiones relacionadas