Returns the root cause of an exception : Exceptions « Language Basics « Java






Returns the root cause of an exception

         
/** 
 * 
 * The ObjectStyle Group Software License, version 1.1
 * ObjectStyle Group - http://objectstyle.org/
 * 
 * Copyright (c) 2002-2005, Andrei (Andrus) Adamchik and individual authors
 * of the software. All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 * 
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 * 
 * 3. The end-user documentation included with the redistribution, if any,
 *    must include the following acknowlegement:
 *    "This product includes software developed by independent contributors
 *    and hosted on ObjectStyle Group web site (http://objectstyle.org/)."
 *    Alternately, this acknowlegement may appear in the software itself,
 *    if and wherever such third-party acknowlegements normally appear.
 * 
 * 4. The names "ObjectStyle Group" and "Cayenne" must not be used to endorse
 *    or promote products derived from this software without prior written
 *    permission. For written permission, email
 *    "andrus at objectstyle dot org".
 * 
 * 5. Products derived from this software may not be called "ObjectStyle"
 *    or "Cayenne", nor may "ObjectStyle" or "Cayenne" appear in their
 *    names without prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 * DISCLAIMED.  IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 * SUCH DAMAGE.
 * 
 * 
 * This software consists of voluntary contributions made by many
 * individuals and hosted on ObjectStyle Group web site.  For more
 * information on the ObjectStyle Group, please see
 * <http://objectstyle.org/>.
 */

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.Serializable;
import java.lang.reflect.Member;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;

import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;


import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;

/**
 * Contains various unorganized static utility methods used across Cayenne.
 * 
 * @author Andrei Adamchik
 */
public class Util {
  /**
   * Looks up and returns the root cause of an exception. If none is found, returns
   * supplied Throwable object unchanged. If root is found, recursively "unwraps" it,
   * and returns the result to the user.
   */
  public static Throwable unwindException(Throwable th) {
      if (th instanceof SAXException) {
          SAXException sax = (SAXException) th;
          if (sax.getException() != null) {
              return unwindException(sax.getException());
          }
      }
      else if (th instanceof SQLException) {
          SQLException sql = (SQLException) th;
          if (sql.getNextException() != null) {
              return unwindException(sql.getNextException());
          }
      }
      else if (th.getCause() != null) {
          return unwindException(th.getCause());
      }

      return th;
  }
}

   
    
    
    
    
    
    
    
    
  








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.Utility class to work with throwables
33.Print all of the thread's information and stack traces
34.Convert an exception to a String with full stack trace
35.Return stack trace from the passed exception as a stringReturn stack trace from the passed exception as a string
36.Create a new RuntimeException, setting the cause if possible.
37.Create a new Exception, setting the cause if possible.
38.Set the cause of the Exception. Will detect if this is not allowed.
39.Get the stack trace of the supplied exception.
40.Display Stack Trace Information with StackTraceElement
41.A collection of utility methods for manipulating exceptions
42.A frame with a panel for testing various exceptionsA frame with a panel for testing various exceptions
43.Convert Throwable to string
44.Convert the result of Exception.getStackTrace to a String
45.Prints the stack trace of the specified throwable to a string and returns it.
46.Get Stack Trace Element
47.Get stack trace and cause exception
48.Exception Helper
49.Exception Util