Próbuję parsować i XML response
, ale ponoszę porażkę. Początkowo myślałem, że , że xml
po prostu nie został zwrócony w odpowiedzi, więc stworzyłem poniższy kod z bezpośrednim linkiem do mojego pliku xml
online. Jestem w stanie wydrukować XML
na ekranie bez żadnych problemów. Jednak gdy zadzwonię do mojej metody parsowania, otrzymam Przedwczesny koniec pliku.Dlaczego pojawia się ten błąd Przedwczesny koniec pliku?
Działa jeśli mijam URL bezpośrednio:
- builder.parse ("");
ale nie powiedzie się, gdy zdałem 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); }
Błędy otrzymuję:
[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)
Czy masz plik XML, który próbujesz analizować. Przedwczesny koniec pliku wskazuje, że plik XML nie był kompletny, ponieważ używasz tutaj połączenia URL, podejrzewam problemy z siecią. Najlepszym sposobem rozwiązania tego problemu jest przechwytywanie tego pliku XML przy użyciu narzędzi typu Wireshark lub monitora TCP, a następnie sprawdzenie, czy jest on kompletny: – NiranjanBhat
@NiranjanBhat. Tak, XMl jest kompletny i ważny. Przetworzyłem ten plik XML za pomocą bezpośredniego linku. Wygląda na to, że błąd pojawia się tylko wtedy, gdy używasz InputStream. – Fabii
Dlaczego robisz POST, ale nie wysyłasz żadnych danych? – EJP