Exception Util : Exceptions « Language Basics « Java

Home
Java
1.2D Graphics GUI
2.3D
3.Advanced Graphics
4.Ant
5.Apache Common
6.Chart
7.Class
8.Collections Data Structure
9.Data Type
10.Database SQL JDBC
11.Design Pattern
12.Development Class
13.EJB3
14.Email
15.Event
16.File Input Output
17.Game
18.Generics
19.GWT
20.Hibernate
21.I18N
22.J2EE
23.J2ME
24.JavaFX
25.JDK 6
26.JDK 7
27.JNDI LDAP
28.JPA
29.JSP
30.JSTL
31.Language Basics
32.Network Protocol
33.PDF RTF
34.Reflection
35.Regular Expressions
36.Scripting
37.Security
38.Servlets
39.Spring
40.Swing Components
41.Swing JFC
42.SWT JFace Eclipse
43.Threads
44.Tiny Application
45.Velocity
46.Web Services SOA
47.XML
Java » Language Basics » Exceptions 




Exception Util
        
/*************************************************************************
 *
 * ADOBE CONFIDENTIAL
 * __________________
 *
 *  Copyright 2002 - 2007 Adobe Systems Incorporated
 *  All Rights Reserved.
 *
 * NOTICE:  All information contained herein is, and remains
 * the property of Adobe Systems Incorporated and its suppliers,
 * if any.  The intellectual and technical concepts contained
 * herein are proprietary to Adobe Systems Incorporated
 * and its suppliers and may be covered by U.S. and Foreign Patents,
 * patents in process, and are protected by trade secret or copyright law.
 * Dissemination of this information or reproduction of this material
 * is strictly forbidden unless prior written permission is obtained
 * from Adobe Systems Incorporated.
 **************************************************************************/
//package flex.messaging.util;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;

/**
 * @exclude
 */
public class ExceptionUtil {
  /**
   * List of no-arg methods that are known to return a wrapped throwable.
   **/
  public static String[] unwrapMethods = "getRootCause",
      "getTargetException""getTargetError""getException",
      "getCausedByException""getLinkedException" };

  public static Throwable wrappedException(Throwable t) {
    // Handle these statically since they are core to Java
    return (instanceof InvocationTargetException((InvocationTargetExceptiont)
        .getTargetException() : getRootCauseWithReflection(t);
  }

  /**
   * Get to the base exception (if any).
   */
  public static Throwable baseException(Throwable t) {
    Throwable wrapped = wrappedException(t);
    return wrapped != null ? baseException(wrapped: t;
  }

  /**
   * Return the stack trace in a String.
   */
  public static String toString(Throwable t) {
    StringWriter strWrt = new StringWriter();
    t.printStackTrace(new PrintWriter(strWrt));

    return strWrt.toString();
  }

  /**
   * Return the stack trace up to the first line that starts with prefix.
   
   * <p>
   * Example: ExceptionUtil.getStackTraceUpTo(exception, "jrunx.");
   * </p>
   */
  public static String getStackTraceUpTo(Throwable t, String prefix) {
    StringTokenizer tokens = new StringTokenizer(toString(t)"\n\r");
    StringBuffer trace = new StringBuffer();
    boolean done = false;

    String lookingFor = "at " + prefix;
    while (!done && tokens.hasMoreElements()) {
      String token = tokens.nextToken();
      if (token.indexOf(lookingFor== -1)
        trace.append(token);
      else
        done = true;
      trace.append("\n");
    }

    return trace.toString();
  }

  /**
   * return the top n lines of this stack trace.
   
   * <p>
   * Example: ExceptionUtil.getStackTraceLines(exception, 10);
   * </p>
   */
  public static String getStackTraceLines(Throwable t, int numLines) {
    StringTokenizer tokens = new StringTokenizer(toString(t)"\n\r");

    StringBuffer trace = new StringBuffer();

    for (int i = 0; i < numLines; i++) {
      String token = tokens.nextToken();
      trace.append(token);
      trace.append("\n");
    }

    return trace.toString();
  }

  /**
   * Return the "nth" method call from the stack trace of "t", where 0 is the
   * top.
   */
  public static String getCallAt(Throwable t, int nth) {
    StringTokenizer tokens = new StringTokenizer(toString(t)"\n\r");
    try {
      // Skip the first line - the exception message
      for (int i = 0; i <= nth; ++i)
        tokens.nextToken();

      // get the method name from the next token
      String token = tokens.nextToken();
      int index1 = token.indexOf(' ');
      int index2 = token.indexOf('(');
      StringBuffer call = new StringBuffer();
      call.append(token.substring(index1 < : index1 + 1,
          index2 < ? call.length() : index2));

      int index3 = token.indexOf(':', index2 < : index2);
      if (index3 >= 0) {
        int index4 = token.indexOf(')', index3);
        call.append(token.substring(index3, index4 < ? token.length()
            : index4));
      }
      return call.toString();
    catch (NoSuchElementException e) {
    }

    return "unknown";
  }

  /**
   * Utility method for converting an exception into a string. This method
   * unwinds all wrapped exceptions
   
   @param t
   *            The throwable exception
   @return The printable exception
   */
  public static String exceptionToString(Throwable t) {
    StringWriter sw = new StringWriter();
    PrintWriter out = new PrintWriter(sw);

    // print out the exception stack.
    printExceptionStack(t, out, 0);
    return sw.toString();
  }

  /**
   * Utility method for converting an exception and all chained root causes
   * into a string. Unlike <code>exceptionToString(Throwable)</code> which
   * prints the chain from most nested root cause down to the top-level
   * exception, this method prints from the top-level exception down to the
   * most nested root cause.
   
   @param t
   *            The throwable exception.
   @return The printable exception.
   */
  public static String exceptionFollowedByRootCausesToString(Throwable t) {
    StringBuffer output = new StringBuffer();
    Throwable root = t;
    while (root != null) {
      output.append((root == t((root instanceof Exception"  Exception: "
          "  Error: ")
          "  Root cause: ");
      output.append(ExceptionUtil.toString(root));
      // Do not recurse if the root cause has already been printed; this
      // will have happened if the root cause has
      // been assigned to the current Throwable via initCause() or as a
      // constructor argument.
      Throwable cause = root.getCause();
      root = ExceptionUtil.wrappedException(root);
      if (cause == root)
        break;
    }
    return output.toString();
  }

  /**
   * Recursively prints out a stack of wrapped exceptions.
   */
  protected static void printExceptionStack(Throwable th, PrintWriter out,
      int depth) {
    // only print the stack depth if the depth is greater than 0
    boolean printStackDepth = depth > 0;

    Throwable wrappedException = ExceptionUtil.wrappedException(th);
    if (wrappedException != null) {
      printStackDepth = true;
      printExceptionStack(wrappedException, out, depth + 1);
    }

    if (printStackDepth) {
      out.write("[" + depth + "]");
    }

    th.printStackTrace(out);
  }

  private static Throwable getRootCauseWithReflection(Throwable t) {
    for (int i = 0; i < unwrapMethods.length; i++) {
      Method m = null;

      try {
        m = t.getClass().getMethod(unwrapMethods[i](Class[]) null);
        return (Throwablem.invoke(t, (Object[]) null);
      catch (Exception nsme) {
        // ignore
      }
    }

    return null;
  }
}

   
    
    
    
    
    
    
    
  














Related examples in the same category
1.Illustrate various Exceptions Illustrate various Exceptions
2.Experience exceptionsExperience exceptions
3.StackTrace
4.Getting the Stack Trace of an Exception
5.What happens if a method declares an unchecked exception?
6.Simple demo of exceptionsSimple demo of exceptions
7.Simple demo of exceptions, with finally clauseSimple demo of exceptions, with finally clause
8.ThreadBasedCatcher - Demonstrate catching uncaught exceptions
9.Exception CatcherException Catcher
10.Turning off Checked exceptions
11.Demonstrates exception chainingDemonstrates exception chaining
12.Finally is always executedFinally is always executed
13.Demonstrating the Exception MethodsDemonstrating the Exception Methods
14.Further embellishment of exception classesFurther embellishment of exception classes
15.The finally clause is always executedThe finally clause is always executed
16.Your own Exception classYour own Exception class
17.Catching exception hierarchiesCatching exception hierarchies
18.How an exception can be lost
19.Exception in main method
20.Ignoring RuntimeExceptionsIgnoring RuntimeExceptions
21.Demonstrating fillInStackTrace()Demonstrating fillInStackTrace()
22.Put printStackTrace() into a String: redirect the StackTrace to a String with a StringWriter/PrintWriter
23.Rethrow a different object from the one that was caughtRethrow a different object from the one that was caught
24.Inheriting your own exceptionsInheriting your own exceptions
25.Overridden methods may throw only the exceptions
26.Returns the output of printStackTrace as a String.
27.Locates a particular type of exception
28.Throw Exception OutThrow Exception Out
29.Get Deepest ThrowableGet Deepest Throwable
30.Make a string representation of the exception
31.Utility methods for dealing with stack traces
32.Returns the root cause of an exception
33.Utility class to work with throwables
34.Print all of the thread's information and stack traces
35.Convert an exception to a String with full stack trace
36.Return stack trace from the passed exception as a stringReturn stack trace from the passed exception as a string
37.Create a new RuntimeException, setting the cause if possible.
38.Create a new Exception, setting the cause if possible.
39.Set the cause of the Exception. Will detect if this is not allowed.
40.Get the stack trace of the supplied exception.
41.Display Stack Trace Information with StackTraceElement
42.A collection of utility methods for manipulating exceptions
43.A frame with a panel for testing various exceptionsA frame with a panel for testing various exceptions
44.Convert Throwable to string
45.Convert the result of Exception.getStackTrace to a String
46.Prints the stack trace of the specified throwable to a string and returns it.
47.Get Stack Trace Element
48.Get stack trace and cause exception
49.Exception Helper
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.