You already have the full stack trace. The "... 13 more
" message is simple suppressing redundant/repeated information.
Let me illustrate:
public static void main(String[] args) throws Exception { a(); }
private static void a() { b(); }
private static void b() { c(); }
private static void c() { d(); }
private static void d() { try { e(); } catch (Exception e) { throw new RuntimeException(e); } }
private static void e() { f(); }
private static void f() { g(); }
private static void g() { try { h(); } catch (Exception e) { throw new IllegalStateException(e); } }
private static void h() { i(); }
private static void i() { j(); }
private static void j() { throw new UnsupportedOperationException("Test"); }
This code throws an exception deep in a call stack. The exception is caught and wrapped in other exceptions, so the output will be:
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
... 5 more
Caused by: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.j(Main.java:17)
at stackoverflow.Main.i(Main.java:16)
at stackoverflow.Main.h(Main.java:15)
... 8 more
The 5 lines suppressed for the IllegalStateException
call stack are the same as the lines from the RuntimeException
call stack.
The 8 lines suppressed for the UnsupportedOperationException
call stack are the same as the lines from the other two call stacks.
Without suppression, the output would be:
Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.IllegalStateException: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
Caused by: java.lang.UnsupportedOperationException: Test
at stackoverflow.Main.j(Main.java:17)
at stackoverflow.Main.i(Main.java:16)
at stackoverflow.Main.h(Main.java:15)
at stackoverflow.Main.g(Main.java:14)
at stackoverflow.Main.f(Main.java:13)
at stackoverflow.Main.e(Main.java:12)
at stackoverflow.Main.d(Main.java:11)
at stackoverflow.Main.c(Main.java:10)
at stackoverflow.Main.b(Main.java:9)
at stackoverflow.Main.a(Main.java:8)
at stackoverflow.Main.main(Main.java:6)
That is just a lot of useless redundant waste of output, and gets a lot worse in real applications where the call stacks are much deeper.