Tengo un cliente de servicio web basado en Java conectado al servicio web Java (implementado en el marco Axis1).
Recibo la siguiente excepción en mi archivo de registro:
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)
Respuestas:
Esto a menudo es causado por un espacio en blanco antes de la declaración XML, pero podría ser cualquier texto , como un guión o cualquier carácter. Digo a menudo causado por el espacio en blanco porque la gente asume que el espacio en blanco siempre es ignorable, pero ese no es el caso aquí.
Otra cosa que sucede a menudo es una BOM UTF-8 (marca de orden de bytes), que se permite antes de que la declaración XML se pueda tratar como un espacio en blanco si el documento se entrega como una secuencia de caracteres a un analizador XML en lugar de una secuencia de bytes .
Lo mismo puede suceder si se usan archivos de esquema (.xsd) para validar el archivo xml y uno de los archivos de esquema tiene una lista de materiales UTF-8 .
fuente
Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))
aDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
En realidad, además de la publicación de Yuriy Zubarev
Cuando pasa un archivo xml inexistente al analizador. Por ejemplo pasas
cuando solo existe el archivo C: /temp/abc.xml en su sistema de archivos
En cualquier caso
o
Todos dan el mismo mensaje de error.
Error muy decepcionante, porque el siguiente rastro
no dice nada sobre el hecho de 'nombre de archivo incorrecto' o 'tal archivo no existe'. En mi caso, tenía el archivo xml absolutamente correcto y tuve que pasar 2 días para determinar el verdadero problema.
fuente
Intente agregar un espacio entre la
encoding="UTF-8"
cadena en el prólogo y la terminación?>
. En XML, el prólogo designa este elemento delimitado por signos de interrogación entre paréntesis al comienzo del documento (mientras que el prólogo de etiqueta en stackoverflow se refiere al lenguaje de programación).Agregado: ¿Es ese guión frente a su prólogo parte del documento? Ese sería el error allí, tener datos en frente del prólogo,
-<?xml version="1.0" encoding="UTF-8"?>
.fuente
<?xml ver...
bit.Tuve el mismo problema (y lo resolví) al intentar analizar un documento XML con freemarker.
No tenía espacios antes del encabezado del archivo XML.
El problema ocurre cuando y solo cuando la codificación del archivo y el atributo de codificación XML son diferentes. (Ej: archivo UTF-8 con atributo UTF-16 en el encabezado).
Entonces tenía dos formas de resolver el problema:
fuente
Significa que XML está mal formado o que el cuerpo de la respuesta no es un documento XML.
fuente
Acabo de pasar 4 horas rastreando un problema similar en un WSDL. Resulta que WSDL utilizó un XSD que importa otro espacio de nombres XSD. Este XSD importado contenía lo siguiente:
Tenga en cuenta el vacío
include
elemento ! Esta fue la raíz de mis problemas. Supongo que esta es una variación del problema de archivo de Egor no encontrado anteriormente.+1 a los informes de error decepcionantes.
fuente
En mi caso, eliminar el atributo 'encoding = "UTF-8"' funcionó por completo.
Parece un problema de codificación del juego de caracteres, tal vez porque su archivo no está realmente en UTF-8.
fuente
Mi respuesta probablemente no lo ayudaría, pero en general ayuda con este problema.
Cuando vea este tipo de excepción, debe intentar abrir su archivo xml en cualquier editor hexadecimal y en algún momento puede ver bytes adicionales al comienzo del archivo que el editor de texto no muestra.
Elimínelos y su xml será analizado.
fuente
A veces es el código, no el XML
El siguiente código,
también dará lugar a este error,
porque está intentando analizar el literal de cadena
"file.xml"
(no el contenido delfile.xml
archivo) y falla porque,"file.xml"
como una cadena, no está bien formado XML.Fijar: Eliminar
StringReader()
:Del mismo modo, los problemas de búfer sucio pueden dejar basura residual por delante del XML real. Si ha revisado cuidadosamente su XML y todavía recibe este error, registre el contenido exacto que se pasa al analizador; a veces lo que realmente se analiza (se intenta que se analice) es sorprendente.
fuente
applicaionContext.xml
ruta en el código, y no estaba registrando el código, solo estaba buscando un error en el archivo XMLPrimero limpie el proyecto, luego reconstruya el proyecto. También estaba enfrentando el mismo problema. Todo salió bien después de esto.
fuente
Si todo lo demás falla, abra el archivo en binario para asegurarse de que no haya caracteres divertidos [3 caracteres no imprimibles al comienzo del archivo que identifiquen el archivo como utf-8] al comienzo del archivo. Hicimos esto y encontramos algunos. entonces convertimos el archivo de utf-8 a ascii y funcionó.
fuente
Por los mismos problemas, he eliminado la siguiente línea,
Esta funcionando bien No estoy tan seguro de por qué ese UTF-8 da problemas. Para mantenerme en shock, también funciona bien para UTF-8.
Estoy usando Windows-7 de 32 bits y Netbeans IDE con Java * jdk1.6.0_13 *. No tengo idea de cómo funciona.
fuente
Como Mike Sokolov ya lo ha señalado, una de las posibles razones es la presencia de algunos caracteres (como un espacio en blanco) antes de la etiqueta.
Si su XML de entrada se lee como una Cadena (en oposición a la matriz de bytes), puede usar reemplazar su cadena de entrada con el código siguiente para asegurarse de que todos los caracteres 'innecesarios' antes de la etiqueta xml se borren.
Sin embargo, debe asegurarse de que la entrada xml comience con la etiqueta xml.
fuente
En mi caso, web.xml en mi aplicación tiene espacio adicional, incluso después de que eliminé no funcionó, tuve que revertir los cambios y sus correcciones y sí, estaba jugando con logging.properties y web.xml en mi tomcat, pero incluso después de revertir el el error seguía apareciendo, así que esto lo solucionó)).
Para ser específico, intenté agregar org.apache.catalina.filters.ExpiresFilter.level = FINE stack over flow algo sobre logging.properties
fuente
Seguí las instrucciones encontradas aquí y recibí el mismo error.
Intenté varias cosas para resolverlo (es decir, cambiar la codificación, escribir el archivo XML en lugar de copiarlo y pegarlo, etc.) en el Bloc de notas y el Bloc de notas XML, pero nada funcionó.
El problema se resolvió cuando edité y guardé mi archivo XML en Notepad ++ (codificación -> utf-8 sin BOM)
fuente
Para todos aquellos que reciben este error: ADVERTENCIA: Catalina.start usando conf / server.xml: el contenido no está permitido en prolog.
No es muy informativo ... pero lo que esto realmente significa es que hay basura en su archivo conf / server.xml.
He visto este error exacto en otros archivos XML. Este error puede ser causado al hacer cambios con un editor de texto que introduce la basura.
La forma en que puede verificar si tiene o no basura en el archivo es abrirlo con un "Editor HEX" Si ve algún carácter antes de esta cadena
como esto sería basura
ese es su problema ... La solución es usar un buen editor HEX ... Uno que le permita guardar archivos con diferentes tipos de codificación ...
Luego solo guárdelo como UTF-8. Algunos sistemas que usan archivos XML pueden necesitar que se guarden como UTF SIN BOM, lo que significa "SIN marca de orden de bytes"
Espero que esto ayude a alguien por ahí!
fuente
Para mí, un Build-> Clean solucionó todo!
fuente
Para solucionar el problema de BOM en sistemas Unix / Linux:
Compruebe si hay un carácter BOM no deseado:
hexdump -C myfile.xml | more
un carácter BOM no deseado aparecerá al comienzo del archivo como...<?xml>
Alternativamente, hazlo
file myfile.xml
. Un archivo con un carácter BOM aparecerá como:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text
Arregle un solo archivo con:
tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml
Repita 1 o 2 para verificar que el archivo ha sido desinfectado. Probablemente también sea sensato hacer
view myfile.xml
para verificar los contenidos que se han quedado.Aquí hay un script bash para desinfectar una carpeta completa de archivos XML:
fuente
Solo un pensamiento adicional sobre este para el futuro. Obtener este error podría ser el caso de que uno simplemente presione la tecla Eliminar o alguna otra tecla al azar cuando tienen una ventana XML como pantalla activa y no están prestando atención. Esto me ha sucedido antes con el archivo struts.xml en mi aplicación web. Codos torpes ...
fuente
También estaba obteniendo lo mismo
XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.
, cuando mi aplicación estaba creando una respuesta XML para una llamada de RestFull Webservice. Al crear la cadena de formato XML, reemplacé el & lt y & gt con <y> luego el error se apagó y estaba obteniendo la respuesta adecuada. No estoy seguro de cómo funcionó, pero funcionó.
muestra :
fuente
Tuve el mismo problema.
Primero descargué el archivo XML al escritorio local y lo obtuve
Content is not allowed in prolog
durante la importación del archivo al servidor del portal. Incluso el archivo visual se veía bien para mí, pero de alguna manera estaba dañado.Así que volví a descargar el mismo archivo e intenté lo mismo y funcionó.
fuente
Recientemente tuvimos el mismo problema y resultó ser el caso de una URL incorrecta y, en consecuencia, una respuesta HTTP 403 estándar (que obviamente no es el XML válido que el cliente estaba buscando). Voy a compartir los detalles en caso de que alguien dentro del mismo contexto se encuentre con este problema:
Esta era una aplicación web basada en Spring en la que se configuró un bean "JaxWsPortProxyFactoryBean" para exponer un proxy para un puerto remoto.
"END_POINT_BASE_URL" es una variable de entorno configurada en "setenv.sh" de la instancia de Tomcat que aloja la aplicación web. El contenido del archivo es algo como esto:
Los desaparecidos ";" después de cada línea causó la URL malformada y, por lo tanto, la mala respuesta. Es decir, en lugar de "BusinessAppServices / OurService? Wsdl", la URL tenía un CR antes de "/". "Monitor TCP / IP" fue bastante útil al solucionar el problema.
fuente
En mi caso, recibí este error porque la API que utilicé podría devolver los datos en formato XML o JSON. Cuando lo probé usando un navegador, el valor predeterminado fue el formato XML, pero cuando invoqué la misma llamada desde una aplicación Java, la API devolvió la respuesta con formato JSON, que naturalmente provocó un error de análisis.
fuente
Incluso me había enfrentado a un problema similar. La razón era un personaje basura al comienzo del archivo.
Solución: simplemente abra el archivo en un editor de texto (probado en texto Sublime), elimine cualquier sangría, si hay alguna, en el archivo y copie y pegue todo el contenido del archivo en un nuevo archivo y guárdelo. ¡Eso es!. Cuando ejecuté el nuevo archivo, se ejecutó sin errores de análisis.
fuente
Tomé el código de Dineshkumar y lo modifiqué para validar mi archivo XML correctamente:
fuente
Configure su documento para que se forme así:
fuente
Tuve el mismo problema con la primavera
y por código de preproceso.
Puede que alguien necesite una razón: BytesMessage #readBytes - leyendo bytes ... y olvidé que la lectura es una operación en una dirección. No puedes leer dos veces.
fuente
Pruebe con BOMInputStream en apache.commons.io:
fuente
Estaba teniendo el mismo problema al analizar el
info.plist
archivo en mi mac. Sin embargo, el problema se solucionó utilizando el siguiente comando que convirtió el archivo en un XML.Espero que ayude a alguien.
fuente
Tuve el mismo problema con algunos archivos XML, resolví leer el archivo con codificación ANSI (Windows-1252) y escribir un archivo con codificación UTF-8 con un pequeño script en Python. Intenté usar Notepad ++ pero no tuve éxito:
fuente