2016-07-10 11 views
0

プロキシを使用してサーバーから情報を取得する方法があります。時には劣悪なプロキシに私は方法は、上記の例外に再試行したいのですが、IOExceptionが、あるいは全く例外で、私は、文字列はここでいくつかの例外を再帰的に再試行する

を返したいSocketExceptionSSLExceptionSSLHandshakeExceptionまたはConnectException

を得る方法であり、私は

System.out.println(c.getTest(3, 0, 5)); 
によって私のテストメソッドを呼び出す

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; 
} 

さまざまなシナリオをテストするために構築しました

最初のプログラムは、私はi = 1としてIOExceptionで作業プロキシが、サーバの応答をエミュレートすることができますが、この方法は、私が変えるために何が必要なのか

テキスト「HTTPエラー」を返すことはありません1を渡すことで、再試行しSocketExceptionをキャッチしますこれが期待通りに機能するためには?

答えて

2

あなたの再帰関数の呼び出しによって返された文字列を返すために、あなたはとても...

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

は、今あなたは、単に再帰関数を実行し、そのを破棄されているような再帰関数呼び出しの前にreturnを配置する必要があります戻り値ロジックはtext文字列を最初の呼び出しから返します(SSLExceptionの場合は空文字列のように見えます)。

また、あなたのロジックの残りの部分を考慮すると、

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

...再帰関数からtextを割り当てることによって、どちらのステートメントを同じ効果を達成することができ、等価です。

+0

私は関数http://pastebin.com/82GHJQBcからテキストを割り当てようとしましたが、現在作業中です – Arya

+0

それを聞いてうれしい! – DeathByTensors

関連する問題