2013-07-12 43 views
0

我正在使用Processing我無法加載XML時,如何從服務器獲取html錯誤說明

我有這樣的查詢服務器:

//溫度是含有該looong URL

try{ 
    xml = loadXML(temp); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

我故意做出的URL錯誤的字符串。當我在瀏覽器中複製並粘貼URL(或點擊上面的內容)時,瀏覽器會顯示一條很好的消息,指明發生的錯誤。 「缺少參數:autor」。我想訪問這些信息以顯示給用戶。但stackTrace更加密碼(最後粘貼)並且不包含上面的有用消息......我怎麼能得到這個消息? 如果我做loadStrings(「http://stackoverflow.com」)例如,我得到所有的HTML作爲字符串,這將足夠我的,但與上面的url中的錯誤500我得到一個錯誤,並沒有達到HTML,但瀏覽器確實如何?服務器是否提供一些備用html?有這個地址嗎? 需要更多信息?

處理2.0願意與javaScript兼容。

感謝

這是錯誤頁面的HTML:

<html> 
     <head></head> 
     <body> 
     <pre style="word-wrap: break-word; white-space: pre-wrap;">Missing parameter:     autor. </pre>     
     </body> 
    </html> 

「java.io.IOException異常:服務器返回的HTTP響應代碼:500網址:http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&&codEstado=&codOrgaoEstado=&emTramitacao=在sun.net.www。在processing.core.PApplet上的processing.core.PApplet.createInputRaw(PApplet.java:6960)處的java.net.URL.openStream(URL.java:1010)處的protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1436) .createInput(PApplet.java:6928)位於processing.core.PApplet.createReader(PApplet.java:6722)位於processing.core.PApplet.loadXML(PApplet.java:6070)位於processing.core.PApplet.loadXML(PApp在processing.core上的processing.core.PApplet.handleDraw(PApplet.java:2245)上的buildingQuery2_class.setup(buildingQuery2_class.java:23)上的buildingQuery2_class $ Query.makeQuery(buildingQuery2_class.java:161)上執行let.java:6060)。 PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)at processing.core.PApplet.run(PApplet.java:2141)at java.lang.Thread.run(Thread.java:680)http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&&codEstado=&codOrgaoEstado=&emTramitacao=不存在或無法讀取java .net.MalformedURLException at java.net.URL。(URL.java:601)at java.net.URL。(URL.java:464)at java.net.URL。(URL.java:413)at com.sun .org.apache.xerces.internal.impl.XMLEntityManager.setupCurrentEntity(XMLEntityManager.java:649)at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineDocVersion(XMLVersionDetector.java:186)at com.sun .org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:772)at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)at com.sun .org.apache.xerces。 internal.parsers.XMLParser.parse(XMLParser.java:119)at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:232)at com.sun.org.apache.xerces。 internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:284)位於processing.core.PApplet的processing.data.XML。(XML.java:170)位於processing.core.PApplet.loadXML(PApplet.java:6070)處。處理時在processing.core.PApplet.handleDraw(PApplet.java:2245)處的buildingQuery2_class.setup(buildingQuery2_class.java:23)處的buildingQuery2_class $ Query.makeQuery(buildingQuery2_class.java:161)處的loadXML(PApplet.java:6060)。 core.PGraphicsJava2D.requestDraw(PGraphicsJava2D.java:243)at processing.core.PApplet.run(PApplet.java:2141)at java.lang.Thread.run(Thread.java:680)

回答

0

我得到了一個很好的答案爲processing forum by PhiLho .. 我會把它留在這裏以備將來之用讀者:

//code from PhiLho at: 
//http://forum.processing.org/topic/how-can-i-get-html-error-description-from-server-when-loading-xml 

import java.net.*; 
import java.io.*; 
String url1 = "http://www.camara.gov.br/SitCamaraWS/Proposicoes.asmx/ListarProposicoes?sigla=PL&numero=&ano=1960&datApresentacaoIni=&datApresentacaoFim=&parteNomeAutor=&siglaPartidoAutor=&siglaUFAutor=&generoAutor=&IdSituacaoProposicao=&IdOrgaoSituacaoProposicao=&&codEstado=&codOrgaoEstado=&emTramitacao="; 
String url2 = "http://Processing.org"; 
// With information frm http://stackoverflow.com/questions/4596447/java-check-if-file-exists-on-remote-server-using-its-url 
URL url = null; 
try 
{ 
    url = new URL(url1); 
} 
catch (MalformedURLException e) 
{ 
    println("Error in URL " + e); 
    exit(); 
} 

HttpURLConnection connection = null; 
try 
{ 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("GET"); 
    int code = connection.getResponseCode(); 
    if (code != HttpURLConnection.HTTP_OK) 
    { 
    println("Answer: " + code + " - " + connection.getResponseMessage()); 
    InputStream error = connection.getErrorStream(); 
    if (error != null) 
    { 
     println("Error response:"); 
     String[] lines = loadStrings(error); 
     println(lines); 
     error.close(); 
    } 
    println("Error header:"); 
    String field = null; 
    int i = 0; 
    do 
    { 
     field = connection.getHeaderField(i); 
     String key = connection.getHeaderFieldKey(i); 
     if (field != null) 
     { 
     println("Header " + i + ": " + (key == null ? "" : key + "=") + field); 
     } 
     i++; 
    } while (field != null); 
    println("End in error"); 
    exit(); 
    } 
} 
catch (IOException e) 
{ 
    println("Error in I/O " + e); 
    exit(); 
} 
println("Correct data:"); 
InputStream input = null; 
try 
{ 
    connection = (HttpURLConnection) url.openConnection(); 
    connection.setRequestMethod("GET"); 
    input = connection.getInputStream(); 
    String[] lines = loadStrings(input); 
    println(lines); 
} 
catch (IOException e) 
{ 
    println("Error " + e); 
} 
finally 
{ 
    if (input != null) 
    { 
    try { input.close(); } catch (IOException e) {} 
    } 
} 
exit(); 
相關問題