retornar new lanzar example catch java exception exception-handling chaining

new - retornar exception java



Obtenga mensajes detallados de excepciones encadenadas de Java (5)

Me gustaría saber cómo podría obtener una Excepción "final", que contiene un mensaje detallado con todos los mensajes detallados de una serie de excepciones encadenadas.

Por ejemplo, supongamos un código como este:

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

No estoy interesado en el stackTrace completo, pero solo en los mensajes que escribí. Quiero decir, me gustaría tener un resultado como este:

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


Creo que lo que necesitas es:

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"] }


Había guardado todos los atributos en un objeto de clase con el siguiente ejemplo:

public List<ErrorMessage> getMessageList(Throwable throwable) { List<ErrorMessage> errorMessageList = new ArrayList<ErrorMessage>(); while (throwable != null) { ErrorMessage message = new ErrorMessage(); message.set_message( throwable.getMessage()); message.set_line(throwable.getStackTrace()[0].getLineNumber()); message.set_methodName(throwable.getStackTrace()[0].getMethodName()); message.set_fileName(throwable.getStackTrace()[0].getFileName() ); message.set_className(throwable.getStackTrace()[0].getClassName()); errorMessageList.add(message); throwable = throwable.getCause(); } return errorMessageList; }


Recorra la causa de la excepción y agregue el mensaje en cada excepción.

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

Que imprime

TERCER EXCEPCIÓN SEGUNDA EXCEPCIÓN Mensaje de PRIMERA EXCEPCIÓN


Solo puede agregar el mensaje de excepción anterior en cada excepción

Esto es un ejemplo :

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

El resultado es: java.lang.Exception: TERCERA EXCEPCIÓN + SEGUNDA EXCEPCIÓN + PRIMERA EXCEPCIÓN


puede usarlo mejor de esta manera, fusione el message() de la Exception anterior con el message() de la nueva Exception que está throw :

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