Using Apache Commons Lang ExceptionUtils


Apache Commons Lang ExceptionUtils provides some utility methods to manipulate and examine Throwable, such as getRootCause, getStackTrace, getFullStackTrace etc.

The following would introduce some common usage of ExceptionUtils.

Check the Root Cause
Sometimes, we need check the root cause of one exception or whether the exception stack trace contains one specific exception. 
For example, when Lucene commit, it may fail due to OutOfMemoryError. But the returned exception maybe IllegalStateException like blow: We need check whether OutOfMemoryError happened.
auto commit error...:java.lang.IllegalStateException: this writer hit 
an OutOfMemoryError; cannot commit 
        at org.apache.lucene.index.IndexWriter.prepareCommit(IndexWriter.java:2650) 
        at org.apache.lucene.index.IndexWriter.commitInternal(IndexWriter.java:2804) 

We can use code like below:
Throwable th= ExceptionUtils.getRootCause();
boolean causedByOOM = th instanceof OutOfMemoryError;

Or if we want to check whether it contains the exception in any position in the exception chaining. Use code like below:
String fullTrace = ExceptionUtils.getFullStackTrace(th);
boolean isOOM = fullTrace.contains("OutOfMemoryError");
Or:
java.io.Writer result = new java.io.StringWriter();
java.io.PrintWriter printWriter = new java.io.PrintWriter(result);
e.printStackTrace(printWriter);
result.toString();
Check Caller or Code Branch
We may want to log some debug message when methodA is called by ClassX.MethodY -either directly or indirectly. We can use code like below:
if (logger.isDebugEnabled()) {
String fullStack = ExceptionUtils.getFullStackTrace(new Throwable());
boolean isXY = fullStack.contains("ClassX.MethodY");
if(isXY) {
logger.debug("some debug message");
}
Resource
Exception Utils Javadoc

Labels

adsense (5) Algorithm (69) Algorithm Series (35) Android (7) ANT (6) bat (8) Big Data (7) Blogger (14) Bugs (6) Cache (5) Chrome (19) Code Example (29) Code Quality (7) Coding Skills (5) Database (7) Debug (16) Design (5) Dev Tips (63) Eclipse (32) Git (5) Google (33) Guava (7) How to (9) Http Client (8) IDE (7) Interview (88) J2EE (13) J2SE (49) Java (186) JavaScript (27) JSON (7) Learning code (9) Lesson Learned (6) Linux (26) Lucene-Solr (112) Mac (10) Maven (8) Network (9) Nutch2 (18) Performance (9) PowerShell (11) Problem Solving (11) Programmer Skills (6) regex (5) Scala (6) Security (9) Soft Skills (38) Spring (22) System Design (11) Testing (7) Text Mining (14) Tips (17) Tools (24) Troubleshooting (29) UIMA (9) Web Development (19) Windows (21) xml (5)