Estoy tratando de analizar y XML response
, pero estoy fallando miserablemente. Inicialmente pensé que el xml
simplemente no se devolvía en la respuesta, así que diseñé el siguiente código con un enlace directo a mi archivo xml
en línea. Puedo imprimir el XML
en la pantalla sin problemas. Sin embargo, cuando llamo a mi método de análisis, obtengo fin de archivo prematuro.¿Por qué recibo este error Fin de archivo prematuro?
Funciona si paso la URL directamente:
- builder.parse ("");
pero falla cuando pasé un InputStream:
builder.parse (connection.getInputStream());
try { URL url = new URL(xml); URLConnection uc = url.openConnection(); HttpURLConnection connection = (HttpURLConnection)uc; connection.setDoInput(true); connection.setDoOutput(true); InputStream instream; InputSource source; //get XML from InputStream if(connection.getResponseCode()>= 200){ connection.connect(); instream = connection.getInputStream(); parseDoc(instream); } else{ instream = connection.getErrorStream(); } } catch (MalformedURLException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } static void parseDoc(InputStream instream) throws ParserConfigurationException, SAXException, IOException{ BufferedReader buff_read = new BufferedReader(new InputStreamReader(instream,"UTF-8")); String inputLine = null; while((inputLine = buff_read.readLine())!= null){ System.out.println(inputLine); } DocumentBuilderFactory factory =DocumentBuilderFactory.newInstance(); factory.isIgnoringElementContentWhitespace(); DocumentBuilder builder = factory.newDocumentBuilder(); Document doc = builder.parse(instream); }
Los errores que estoy recibiendo:
[Fatal Error] :1:1: Premature end of file.
org.xml.sax.SAXParseException: Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(Unknown Source)
at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(Unknown Source)
at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
at com.ameba.api.network.MainApp.parseDoc(MainApp.java:78)
at com.ameba.api.network.MainApp.main(MainApp.java:41)
Tiene el archivo XML que intenta analizar. El final prematuro del archivo indica que su archivo XML no se completó, ya que aquí está usando la conexión URL, sospecho que hay problemas de red. La mejor manera de resolver este problema es capturar este archivo XML utilizando wireshark o el tipo de herramientas de monitor TCP y luego verificar si está completo – NiranjanBhat
@NiranjanBhat. Sí, el XMl está completo y es válido. He analizado este xml con un enlace directo. Parece que el error solo surge cuando se usa un InputStream. – Fabii
¿Por qué estás haciendo una POST pero no envías datos? – EJP