2016-07-10 11 views
0

Ich habe eine Methode, die Proxys verwendet, um Informationen von einem Server abzurufen. Manchmal aufgrund einer schlechten Proxy ich SocketException bekommen, SSLException, SSLHandshakeException oder ConnectExceptionWiederholen bei einigen Ausnahmen rekursiv

ich die Methode wollen oben auf die Ausnahmen wiederholen, aber auf der IOException oder keine Ausnahme Ich möchte eine Zeichenfolge

zurück

Hier ist die Methode, ich konstruiert verschiedene Szenarien testen

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

ich meine Testmethode aufrufen, indem

System.out.println(c.getTest(3, 0, 5)); 

Zunächst würde das Programm fangen ein SocketException dann um 1 wiederholen vorbei, so kann ich einen funktionierenden Proxy emulieren, aber eine Antwort des Servers mit IOException als i = 1 aber die Methode gibt nie den Text „HTTP ERROR“

Was muss ich ändern Damit dies wie erwartet funktioniert?

Antwort

2

Um die Zeichenfolge, die durch Ihren rekursiven Funktionsaufruf zurückgegeben zurückzukehren, Sie return vor dem rekursiven Funktionsaufruf wie so ... seiner

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

Gerade jetzt sind Sie einfach laufen die rekursive Funktion und Verwerfen stellen müssen Rückgabewert. Ihre Logik gibt dann Ihren text String vom ersten Aufruf zurück (was im Fall eines SSLException wie eine leere Zeichenfolge aussieht).

Sie auch die gleiche Wirkung erreichen könnte durch text aus der rekursiven Funktion zuweisen ...

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

Beide Aussagen, den Rest Ihrer Logik bedenkt, sind gleichwertig.

+0

Ich habe versucht, Text von der Funktion http://pastebin.com/82GHJQBc Zuordnung und scheint jetzt zu arbeiten – Arya

+0

Froh, es zu hören! – DeathByTensors

Verwandte Themen