Sto cercando di analizzare e XML response
, ma sto fallendo miseramente. Inizialmente ho pensato che non fosse stato restituito nella risposta, xml
, quindi ho creato il codice sottostante con un collegamento diretto al mio file xml
online. Sono in grado di stampare lo XML
sullo schermo senza problemi. Tuttavia quando chiamo il mio metodo di analisi ottengo Fine prematura del file.Perché ottengo questo errore Fine prematura del file?
Funziona se mi passate l'URL direttamente:
- builder.parse ("");
ma fallisce quando ho passato 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); }
Gli errori che sto ottenendo:
[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)
Avete il file XML che si sta tentando di analizzare. La fine prematura del file indica che il tuo file XML non era completo, dal momento che stai usando la connessione URL qui, ho il sospetto che ci siano problemi di rete. Il modo migliore per risolvere questo problema è quello di acquisire questo file XML utilizzando il tipo di strumenti wireshark o Monitor TCP e quindi verificare se è completo – NiranjanBhat
@NiranjanBhat. Sì, XMl è completo e valido. Ho analizzato questo xml con un collegamento diretto. Sembra che l'errore si verifichi solo quando si utilizza un InputStream. – Fabii
Perché stai facendo un POST ma non invii dati? – EJP