2010-01-07 19 views
22

Estoy corrigiendo un error en un código existente relacionado con DocumentBuilder.parse. Tengo el código de abajo:DocumentBuilder.parse (InputStream) devuelve nulo

String theOutput; 
    theOutput = response.encodeURL(prefix + "/include/sampleForConversion.jsp?" + request.getQueryString(); 
    StreamSource xmlSource = new StreamSource(new URL(theOutput).openStream(), "http://sampleApps.net/static/dataDef1.1.dtd");           
    Document xmlDoc = dBuilder.parse(xmlSource.getInputStream()); 

No entiendo por qué estoy recibiendo un valor nulo para xmlDoc aunque no tengo los valores válidos para las variables theOutput y xmlSource. Por favor ayuda.

gracias!

+2

Solo para aclarar: ¿tiene '(xmlDoc == nulo) = verdadero' o se obtiene un documento vacío (' [#documento: nulo] ')? El método de análisis debe devolver un documento o lanzar una excepción, pero nunca devolver 'null' ... –

+0

hi Adreas, Me sale [#document: null] –

+10

' [#document: null] 'no significa un documento nulo, eso es solo la salida 'documentS' mal escrita 'toString()'. – skaffman

Respuesta

40

Hay una buena posibilidad de que la secuencia se haya analizado correctamente, porque xmlDoc.toString() siempre será "[#document: null]". Esto no indica que el árbol DOM está vacío. Verifique primero, si el documento tiene algunos nodos (hijos).

Si el DOM estaba realmente vacío, imprimí primero el contenido de la secuencia de entrada a la consola (tal vez xmlSource.getInputStream().toString() ya devolvió el contenido) para comprobar si el contenido está bien formado, verifique si el dtd el archivo fue accesible (navegador) y finalmente, volcar el documento XML y el dtd en archivos para verificar si el contenido XML es válido.

Ahh, espere un segundo, pensé que el segundo parámetro era el URI del archivo DTD, pero la cadena es el identificador de sistema del documento xml (public StreamSource(InputStream inputStream, String systemId)). Tal vez eso sea un problema: la clase StreamSource usará este URI para resolver los URI relativos (como su DTD).

+0

¿Alguna vez este método devolverá nulo o arrojará una excepción en esos casos? 'DocumentBuilder.parse (InputStream)' –

Cuestiones relacionadas