2010-03-02 24 views
11

analizar un archivo XML en Java me sale el error:error sobre los caracteres no válidos XML en Java

An invalid XML character (Unicode: 0x0) was found in the element content of the document.

el XML proviene de un servicio web.

El problema es que me sale el error solo cuando el servicio web se ejecuta en localhost (windows + tomcat), pero no cuando el servicio web está en línea (linux + tomcat).

¿Cómo puedo reemplazar el carácter no válido? Gracias.

Respuesta

7

fija con este código:

String cleanXMLString = null; 
Pattern pattern = null; 
Matcher matcher = null; 
pattern = Pattern.compile("[\\000]*"); 
matcher = pattern.matcher(dirtyXMLString); 
if (matcher.find()) { 
    cleanXMLString = matcher.replaceAll(""); 
} 
+3

+1, pero se puede simplificar con 'dirtyXMLString.replaceAll (" [\\ 000] * "," ")' embargo. – sp00m

+2

Se puede acelerar también cambiando '' 'a a' + ':' dirtyXMLString.replaceAll ("[\\ 000] +", "") ' – Whitecat

4

Este es un problema de codificación. O lo lee la ruta de entrada como UTF8 y no lo es o viceversa.

Debe especificar la codificación explícitamente cuando lea el contenido. P.ej. a través de

new InputStreamReader(getInputStream(), "UTF-8") 

Otro problema podría ser el tomcat. Intente agregar URIEncoding = "UTF-8" en la configuración del conector de su tomcat en el archivo server.xml. Porque:

It turned out that the JSP specification says that if the page encoding of the JSP pages is not explicitely declared, then ISO-8859-1 should be used (!).

Tomado de here.

+0

personaje como este http://www.fileformat.info/info/unicode/char/e4f8/index.htm falla mientras que el ahorro de MySQL. ¿Hay una manera genérica de encontrarlos o ignorarlos en Java? Agregar "UTF-8" no ayuda. – titogeo

-1

Un poco de mirar a su alrededor revela que 0x0 es un carácter nulo, alguien más tenía el mismo problema con XML y los caracteres nulos aquí http://forums.sun.com/thread.jspa?threadID=579849. No estoy seguro de cómo está analizando el XML, pero si lo obtiene como una cadena primero hay alguna discusión sobre cómo reemplazar el nulo aquí http://forums.sun.com/thread.jspa?threadID=628189.

+0

-1 Esos enlaces parecen estar muertos ahora. Esta es la razón por la cual se desaconsejan las respuestas de solo enlace. –

11

El carácter Unicode 0x0 representa NULL lo que significa que los datos que está extrayendo contienen un NULO en alguna parte (lo cual no está permitido en XML y, por lo tanto, es su error).

Asegúrese de averiguar qué causa el NULL en primer lugar.

Además, ¿cómo está interactuando con el servicio web? Si está utilizando Axis, asegúrese de que el WSDL tenga alguna codificación especificada para datos dentro y fuera.

+2

+1 para el enfoque de sentido común. Fijar ciegamente tal error sin importar de dónde viene no es una buena idea. – Tomalak

Cuestiones relacionadas