2011-08-03 34 views
1

我不明白髮生了什麼?無法捕捉異常 - Java與HtmlUnit?

我有以下代碼:

public static void main(String[] args){ 

    WebClient wc = null; 
    HtmlPage hp = null; 
    ArrayList<Product> allProducts; 
    try{ 
     wc = new WebClient(BrowserVersion.FIREFOX_3_6); 
     hp = wc.getPage("http://www.mega.co.il/"); 
    }catch (Exception e) { 

    } 
    finally{ 
     allProducts = getProducts(wc, hp); 
     for (Product product : allProducts) { 
      System.out.println(product); 
     } 
    } 
} 

並且仍然控制檯顯示一個javax.net.ssl.SSLPeerUnverifiedException在 馬力= wc.getPage(「HTTP被拋出://www.mega。 co.il/「); line:

Aug 3, 2011 10:45:19 PM com.gargoylesoftware.htmlunit.html.BaseFrame loadInnerPageIfPossible 
SEVERE: IOException when getting content for iframe: url=[http://www.mega.co.il/jsfweb/logins/rightLoginHPIframe.jsf] 
javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated 
    at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(Unknown Source) 
    at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128) 
    at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339) 
    at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123) 
    at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147) 
    at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108) 
    at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641) 
    at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:597) 
    at com.gargoylesoftware.htmlunit.HttpWebConnection.getResponse(HttpWebConnection.java:133) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1405) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseFromWebConnection(WebClient.java:1459) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponse(WebClient.java:1324) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:303) 
    at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPageIfPossible(BaseFrame.java:141) 
    at com.gargoylesoftware.htmlunit.html.BaseFrame.loadInnerPage(BaseFrame.java:100) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.loadFrames(HtmlPage.java:1763) 
    at com.gargoylesoftware.htmlunit.html.HtmlPage.initialize(HtmlPage.java:204) 
    at com.gargoylesoftware.htmlunit.WebClient.loadWebResponseInto(WebClient.java:436) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:307) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:369) 
    at com.gargoylesoftware.htmlunit.WebClient.getPage(WebClient.java:354) 
    at DBSniffer.main(DBSniffer.java:107) 

有人能解釋我發生了什麼事嗎?

P.S
不知何故應用程序繼續運行!

由於提前, 丹

+0

貌似異常被抓內部。如果你在你的catch語句中打印某些東西,你看到它了嗎? –

+0

不,它永遠不會去捕獲報告 – RCB

回答

4

打印的例外是永遠不會傳播到你的catch子句。它在內部被捕獲,並在標準錯誤上打印。

要抑制警告,您需要告訴API不要打印它們。

嘗試以下操作:

webClient.setThrowExceptionOnScriptError(false); 
webClient.setPrintContentOnFailingStatusCode(false); 
webClient.setThrowExceptionOnScriptError(false); 
+0

,但如果它在內部被捕獲,爲什麼日食告訴我,我需要捕獲此異常或進一步拋出它。這意味着在這個過程中沒有人抓住它!? – RCB

+0

究竟哪個例外說你需要捕捉? – aioobe

+0

對不起,你是正確的沒有必要趕上這個異常,謝謝 – RCB