Who is calling me? – Analyzing the Java Callstack

2
Share this on .. Tweet about this on Twitter0Share on LinkedIn0Share on Facebook0Share on Google+0Email this to someoneShare on TumblrBuffer this page

During the Spring Workshop, Rod Johnson started a brief discussion on how to find out in a Java Class who invoked the method currently being executed. The best trick: create a new Throwable and inspect the stacktrace. In Java 1.3 you had to use the printstackTrace() method and parse the String, in Java 1.4 there is the StackTraceElement[] that you can inspect. A simple utility class that informs any caller about his own caller could look like this:

public static String whoCalledMe()
	{
		 Throwable t = new Throwable();
		 return t.getStackTrace()[2].toString();
	}

or:

public static Class whoCalledMe()
	{
		 Throwable t = new Throwable();
		 return t.getStackTrace()[2].getClass(); // that is: Class, not Object!
	}

example code:

/*
 * Created on Jun 10, 2005
 *
 */
package nl.amis.util;

/**
 * @author Lucas
 *
 */
public class CallStackUtils {

	public static String whoCalledMe()
	{
		 Throwable t = new Throwable();
		 return t.getStackTrace()[2].toString();
	}

	public String getCall() {
		return whoCalledMe();
	}

	public String inBetween() {
		return getCall();
	}

	public static void main(String[] args) {

		CallStackUtils call = new CallStackUtils();
		System.out.println(call.inBetween());
	}
}

The output of running main is: nl.amis.util.CallStackUtils.inBetween(CallStackUtils.java:24)

Methods on StackTraceElement include: isNativeMethod() getLineNumber() getClass() getMethodName() getFileName() getClassName()

Share this on .. Tweet about this on Twitter0Share on LinkedIn0Share on Facebook0Share on Google+0Email this to someoneShare on TumblrBuffer this page

About Author

Lucas Jellema, active in IT (and with Oracle) since 1994. Oracle ACE Director for Fusion Middleware. Consultant, trainer and instructor on diverse areas including Oracle Database (SQL & PL/SQL), Service Oriented Architecture, BPM, ADF, JavaScript, Java in various shapes and forms and many other things. Author of the Oracle Press books: Oracle SOA Suite 11g Handbook and Oracle SOA Suite 12c Handbook. Frequent presenter on conferences such as JavaOne and Oracle OpenWorld. Presenter for Oracle University Celebrity specials.

2 Comments