2013-04-13 13 views
15

Chciałbym wiedzieć, w jaki sposób można zarażać, dostarczając szczegółową wiadomość ze wszystkimi szczegółowymi komunikatami dotyczącymi wielu wyjątków związanych z łańcuchem.Uzyskaj szczegółowe komunikaty o wyjątkach związanych z łańcuchem Java

Na przykład załóżmy, że kod tak:

try { 
    try { 
    try { 
     try { 
     //Some error here 
     } catch (Exception e) { 
     throw new Exception("FIRST EXCEPTION", e); 
     } 
    } catch (Exception e) { 
     throw new Exception("SECOND EXCEPTION", e); 
    } 
    } catch (Exception e) { 
    throw new Exception("THIRD EXCEPTION", e); 
    } 
} catch (Exception e) { 
    String allMessages = //all the messages 
    throw new Exception(allMessages, e); 
} 

Nie jestem zainteresowany w pełnym stackTrace, ale tylko w komunikatach pisałem. To znaczy, chciałabym mieć wynik takiego:

java.lang.Exception: THIRD EXCEPTION + SECOND EXCEPTION + FIRST EXCEPTION 

Odpowiedz

22

myślę, czego potrzebujesz to:

public static List<String> getExceptionMessageChain(Throwable throwable) { 
    List<String> result = new ArrayList<String>(); 
    while (throwable != null) { 
     result.add(throwable.getMessage()); 
     throwable = throwable.getCause(); 
    } 
    return result; //["THIRD EXCEPTION", "SECOND EXCEPTION", "FIRST EXCEPTION"] 
} 
+0

Doskonałe rozwiązanie, thanx! Inne sugestie były również dobre, ale w ten sposób mam kod scentralizowany w jednej metodzie i muszę tylko zmodyfikować metody z których wyrzucam * final * 'Exception' ... – MikO

1

można lepiej używać go w ten sposób scalić message() poprzedniego Exception z message() nowych Exception jesteś throw ing:

 } catch (Exception e) { 
      throw new Exception("FIRST EXCEPTION" + e.getMessage(), e); 
     } 
1

Przejrzyj przyczynę wyjątku i dołącz wiadomość w każdym wyjątku.

try 
    { 
     try 
     { 
      try 
      { 
       try 
       { 
        throw new RuntimeException("Message"); 
       } 
       catch (Exception e) 
       { 
        throw new Exception("FIRST EXCEPTION", e); 
       } 
      } 
      catch (Exception e) 
      { 
       throw new Exception("SECOND EXCEPTION", e); 
      } 
     } 
     catch (Exception e) 
     { 
      throw new Exception("THIRD EXCEPTION", e); 
     } 
    } 
    catch (Exception e) 
    { 
     String message = e.getMessage(); 
     Throwable inner = null; 
     Throwable root = e; 
     while ((inner = root.getCause()) != null) 
     { 
      message += " " + inner.getMessage(); 
      root = inner; 
     } 
     System.out.println(message); 
    } 

która drukuje

Trzeci wyjątek Drugi wyjątek Pierwszy wyjątek Wiadomość

1

Można tylko dodać poprzednią wiadomość wyjątku na każdy wyjątek

To jest przykład:

public static void main(String[] args) { 

    try { 
     try { 
      try { 
       try { 
        throw new Exception(); 
        // Some error here 
       } catch (Exception e) { 
        throw new Exception("FIRST EXCEPTION", e); 
       } 
      } catch (Exception e) { 
       Exception e2 = new Exception("SECOND EXCEPTION + " + e.getMessage()); 
       throw e2; 
      } 
     } catch (Exception e) { 
      Exception e3 = new Exception("THIRD EXCEPTION + " + e.getMessage()); 
      throw e3; 
     } 
    } catch (Exception e) { 
     System.out.println(e); 
    } 
} 

Wynikiem jest: java.lang.Exception: Trzeci wyjątek + Drugi wyjątek + Pierwszy wyjątek

Powiązane problemy