2010-03-02 13 views
11

parsing di un file XML su Java ottengo l'errore:errore su caratteri XML non validi su Java

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

il codice XML viene da un webservice.

Il problema è che ottengo l'errore solo quando il servizio Web è in esecuzione su localhost (windows + tomcat), ma non quando il servizio web è online (linux + tomcat).

Come posso sostituire il carattere non valido? Grazie.

risposta

7

fisso con questo codice:

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, ma può essere semplificato da 'dirtyXMLString.replaceAll (" [\\ 000] * "," ")' comunque. – sp00m

+2

Può essere velocizzato anche cambiando il carattere '*' in un '+': 'dirtyXMLString.replaceAll (" [\\ 000] + "," ")' – Whitecat

4

Questo è un problema di codifica. O lo leggi inputstream come UTF8 e non lo è o viceversa.

È necessario specificare la codifica in modo esplicito quando si legge il contenuto. Per esempio. via

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

Un altro problema potrebbe essere il tomcat. Prova ad aggiungere URIEncoding = "UTF-8" nelle impostazioni del connettore del tuo tomcat nel file server.xml. Perché:

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 (!).

Tratto da here.

+0

personaggio del genere http://www.fileformat.info/info/unicode/char/e4f8/index.htm fallisce, mentre il risparmio a mysql. C'è un modo generico per trovare o ignorare questi in Java. L'aggiunta di "UTF-8" non aiuta. – titogeo

-1

Un po 'di guardarsi intorno rivela che 0x0 è un carattere null, qualcun altro ha lo stesso problema con XML e caratteri null qui http://forums.sun.com/thread.jspa?threadID=579849. Non sei sicuro di come stai analizzando l'XML, ma se lo ottieni come una stringa prima c'è un po 'di discusore su come sostituire il null qui http://forums.sun.com/thread.jspa?threadID=628189.

+0

-1 Questi collegamenti sembrano essere morti ora. Questo è il motivo per cui le risposte di solo collegamento sono scoraggiate. –

11

Il carattere Unicode 0x0 rappresenta NULL che significa che i dati che stai tirando contengono un NULL da qualche parte (che non è consentito in XML e quindi il tuo errore).

Assicurati di scoprire che cosa causa NULL in primo luogo.

Inoltre, come stai interagendo con il WebService? Se si utilizza Axis, assicurarsi che WSDL disponga di alcune codifiche specificate per i dati in entrata e in uscita.

+2

+1 per approccio di buon senso. Fissare ciecamente un tale errore senza preoccuparsi da dove proviene non è una buona idea. – Tomalak

Problemi correlati