2016-07-10 30 views
0

我有一個使用代理從服務器檢索信息的方法。有時由於錯誤的代理,我得到SocketExceptionSSLExceptionSSLHandshakeExceptionConnectException重試一些例外遞歸

我想方法對異常重試以上,但對IOException異常或沒有例外,我想一個字符串返回

這裏是方法我構建了測試不同的場景

public String getTest(int i, int current, int total) 
{ 
    String text = ""; 
    try 
    { 
     if (i == 1) 
      throw new IOException(); 
     else if (i == 2) 
      throw new SSLException("SSLEx"); 
     else if (i == 3) 
      throw new SocketException(); 
     else 
      text = "EVERYTHING GOOD"; 
    } 
    catch (SSLException | SocketException re) 
    { 
     if (current < total) 
     { 
      System.out.println("Recalling " + current); 
      getTest(1, ++current, total); 
     } 
    } 
    catch (IOException ioe) 
    { 
     text = "HTTP ERROR"; 
    } 
    catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

    return text; 
} 

我通過

System.out.println(c.getTest(3, 0, 5)); 
打電話給我的測試方法

最初計劃將搭上SocketException隨後通過1重試,所以我可以模仿一個工作代理,但與服務器響應IOExceptioni = 1,但此方法不會返回文本「HTTP錯誤」

什麼我需要改變爲了這個按預期工作?

回答

2

爲了回報您的遞歸函數調用返回的字符串,你必須把return遞歸函數調用像這樣前...

return getTest(1, ++current, total); 

現在只運行遞歸函數並丟棄其返回值。你的邏輯然後返回你的text字符串從最初的調用(這在SSLException的情況下看起來像一個空字符串)。

你也可以通過遞歸函數分配text達到相同的效果......

text = getTest(1, ++current, total); 

兩個聲明,考慮你的邏輯的其餘部分,是等價的。

+0

我試着從函數http://pastebin.com/82GHJQBc分配文本,看起來現在正在工作 – Arya

+0

很高興聽到它! – DeathByTensors