ExceptionUtil { public static String getDetailMessage(Throwable ex) { if (ex == null || Strings.isNullOrEmpty(ex.getMessage())) { return ""; } StringBuilder builder = new StringBuilder(ex.getMessage()); List<Throwable> causes = Lists.newLinkedList(); int counter = 0; Throwable current = ex; while (current.getCause() != null && counter < 10) { Throwable next = current.getCause(); causes.add(next); current = next; counter++; } for (Throwable cause : causes) { if (Strings.isNullOrEmpty(cause.getMessage())) { counter--; continue; } builder.append(" [Cause: ").append(cause.getMessage()); } builder.append(Strings.repeat("]", counter)); return builder.toString(); }  static String getDetailMessage(Throwable ex);  }
@Test public void testGetDetailMessageWithNoCause() throws Exception { String someMessage = "some message"; Throwable ex = new Throwable(someMessage); assertEquals(someMessage, ExceptionUtil.getDetailMessage(ex)); }
@Test public void testGetDetailMessageWithCauses() throws Exception { String causeMsg1 = "some cause"; String causeMsg2 = "another cause"; String someMessage = "some message"; Throwable cause2 = new Throwable(causeMsg2); Throwable cause1 = new Throwable(causeMsg1, cause2); Throwable ex = new Throwable(someMessage, cause1); String expected = someMessage + " [Cause: " + causeMsg1 + " [Cause: " + causeMsg2 + "]]"; assertEquals(expected, ExceptionUtil.getDetailMessage(ex)); }
@Test public void testGetDetailMessageWithCauseMessageNull() throws Exception { String someMessage = "some message"; Throwable cause = new Throwable(); Throwable ex = new Throwable(someMessage, cause); assertEquals(someMessage, ExceptionUtil.getDetailMessage(ex)); }
@Test public void testGetDetailMessageWithNullMessage() throws Exception { Throwable ex = new Throwable(); assertEquals("", ExceptionUtil.getDetailMessage(ex)); assertEquals("", ExceptionUtil.getDetailMessage(null)); }