Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to read the full stacktrace in Java where it says e.g. "... 23 more"

I want to read the full stack trace of an exception that I capture.

For example:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.ibm.db2.jcc.DB2Driver'  at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1136)  at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)  at com.azurian.lce.usuarios.ConnectionManager.getConnection(ConnectionManager.java:65)  at com.azurian.lce.usuarios.db2.UsuarioDAOImpl.autenticar(UsuarioDAOImpl.java:101)  at com.azurian.lce.usuarios.UsuarioServiceImpl.autenticar(UsuarioServiceImpl.java:31)  at com.azurian.lce.web.admin.actions.LoginAction.execute(LoginAction.java:49)  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)  at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)  at java.lang.Thread.run(Unknown Source) Caused by: java.lang.ClassNotFoundException: COM.ibm.db2.jcc.DB2Driver  at java.net.URLClassLoader$1.run(Unknown Source)  at java.security.AccessController.doPrivileged(Native Method)  at java.net.URLClassLoader.findClass(Unknown Source)  at java.lang.ClassLoader.loadClass(Unknown Source)  at java.lang.ClassLoader.loadClass(Unknown Source)  at java.lang.ClassLoader.loadClassInternal(Unknown Source)  at java.lang.Class.forName0(Native Method)  at java.lang.Class.forName(Unknown Source)  at org.apache.tomcat.dbcp.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1130)  ... 23 more 

I want to read the "... 23 more" to see where the exception comes from.

like image 905
Enrique San Martín Avatar asked Jun 03 '10 22:06

Enrique San Martín


People also ask

How do you read a Java Stacktrace?

To read this stack trace, start at the top with the Exception's type - ArithmeticException and message The denominator must not be zero . This gives an idea of what went wrong, but to discover what code caused the Exception, skip down the stack trace looking for something in the package com.

How do you print a full Stacktrace?

Using printStackTrace() method − It print the name of the exception, description and complete stack trace including the line where exception occurred. Using toString() method − It prints the name and description of the exception. Using getMessage() method − Mostly used. It prints the description of the exception.

How do you analyze a Stacktrace?

Analyze external stack tracesFrom the main menu, select Code | Analyze Stack Trace or Thread Dump. In the Analyze Stack Trace dialog that opens, paste the external stack trace or thread dump into the Put a stacktrace here: text area. Click OK. The stack trace is displayed in the Run tool window.

What is full Stacktrace?

A full stack trace allows you to see the chain of files from when your custom tag reached your set breakpoint. If you click on any of the pages in the caller chain then FusionDebug will show you that page and will highlight the line at which the next page in the chain was called.


2 Answers

BalusC is right. See here: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/Throwable.html#printStackTrace()

In particular:

Note the presence of lines containing the characters "...". These lines indicate that the remainder of the stack trace for this exception matches the indicated number of frames from the bottom of the stack trace of the exception that was caused by this exception (the "enclosing" exception). This shorthand can greatly reduce the length of the output in the common case where a wrapped exception is thrown from same method as the "causative exception" is caught.

What this means in your example is that:

BasicDataSource.java line 1136 caught the ClassNotFoundException thrown on line 1130 and reraised it as a SQLNestedException. Hence the remainder of the stacktrace for the ClassNotFoundException matches the SQLNestedException above and the stacktrace is printed in this more concise format.

like image 93
mikej Avatar answered Sep 16 '22 22:09

mikej


The answer is simple, those lines are already in the stacktrace :)

 at org.apache.tomcat.dbcp.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)  at com.azurian.lce.usuarios.ConnectionManager.getConnection(ConnectionManager.java:65)  at com.azurian.lce.usuarios.db2.UsuarioDAOImpl.autenticar(UsuarioDAOImpl.java:101)  at com.azurian.lce.usuarios.UsuarioServiceImpl.autenticar(UsuarioServiceImpl.java:31)  at com.azurian.lce.web.admin.actions.LoginAction.execute(LoginAction.java:49)  at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)  at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)  at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1482)  at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:525)  at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)  at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)  at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)  at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)  at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)  at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)  at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)  at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)  at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)  at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)  at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)  at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)  at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)  at java.lang.Thread.run(Unknown Source) 

Basically, the following is happening in BasicDataSource#createDataSource():

try {     Class.forName(driverClassName); // Line 1130 } catch (ClassNotFoundException e) {     throw new SQLNestedException(e, "Cannot load JDBC driver class '" + driverClassName + "'"); // Line 1136 } 
like image 27
BalusC Avatar answered Sep 20 '22 22:09

BalusC