001 /*
002 * Copyright 1999-2006 Sun Microsystems, Inc. All Rights Reserved.
003 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
004 *
005 * This code is free software; you can redistribute it and/or modify it
006 * under the terms of the GNU General Public License version 2 only, as
007 * published by the Free Software Foundation. Sun designates this
008 * particular file as subject to the "Classpath" exception as provided
009 * by Sun in the LICENSE file that accompanied this code.
010 *
011 * This code is distributed in the hope that it will be useful, but WITHOUT
012 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
013 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
014 * version 2 for more details (a copy is included in the LICENSE file that
015 * accompanied this code).
016 *
017 * You should have received a copy of the GNU General Public License version
018 * 2 along with this work; if not, write to the Free Software Foundation,
019 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
020 *
021 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
022 * CA 95054 USA or visit www.sun.com if you need additional information or
023 * have any questions.
024 */
025
026 package java.lang.reflect;
027
028 /**
029 * Thrown by a method invocation on a proxy instance if its invocation
030 * handler's {@link InvocationHandler#invoke invoke} method throws a
031 * checked exception (a {@code Throwable} that is not assignable
032 * to {@code RuntimeException} or {@code Error}) that
033 * is not assignable to any of the exception types declared in the
034 * {@code throws} clause of the method that was invoked on the
035 * proxy instance and dispatched to the invocation handler.
036 *
037 * <p>An {@code UndeclaredThrowableException} instance contains
038 * the undeclared checked exception that was thrown by the invocation
039 * handler, and it can be retrieved with the
040 * {@code getUndeclaredThrowable()} method.
041 * {@code UndeclaredThrowableException} extends
042 * {@code RuntimeException}, so it is an unchecked exception
043 * that wraps a checked exception.
044 *
045 * <p>As of release 1.4, this exception has been retrofitted to
046 * conform to the general purpose exception-chaining mechanism. The
047 * "undeclared checked exception that was thrown by the invocation
048 * handler" that may be provided at construction time and accessed via
049 * the {@link #getUndeclaredThrowable()} method is now known as the
050 * <i>cause</i>, and may be accessed via the {@link
051 * Throwable#getCause()} method, as well as the aforementioned "legacy
052 * method."
053 *
054 * @author Peter Jones
055 * @version 1.22, 07/06/22
056 * @see InvocationHandler
057 * @since 1.3
058 */
059 public class UndeclaredThrowableException extends RuntimeException {
060 static final long serialVersionUID = 330127114055056639L;
061
062 /**
063 * the undeclared checked exception that was thrown
064 * @serial
065 */
066 private Throwable undeclaredThrowable;
067
068 /**
069 * Constructs an {@code UndeclaredThrowableException} with the
070 * specified {@code Throwable}.
071 *
072 * @param undeclaredThrowable the undeclared checked exception
073 * that was thrown
074 */
075 public UndeclaredThrowableException(Throwable undeclaredThrowable) {
076 super ((Throwable) null); // Disallow initCause
077 this .undeclaredThrowable = undeclaredThrowable;
078 }
079
080 /**
081 * Constructs an {@code UndeclaredThrowableException} with the
082 * specified {@code Throwable} and a detail message.
083 *
084 * @param undeclaredThrowable the undeclared checked exception
085 * that was thrown
086 * @param s the detail message
087 */
088 public UndeclaredThrowableException(Throwable undeclaredThrowable,
089 String s) {
090 super (s, null); // Disallow initCause
091 this .undeclaredThrowable = undeclaredThrowable;
092 }
093
094 /**
095 * Returns the {@code Throwable} instance wrapped in this
096 * {@code UndeclaredThrowableException}, which may be {@code null}.
097 *
098 * <p>This method predates the general-purpose exception chaining facility.
099 * The {@link Throwable#getCause()} method is now the preferred means of
100 * obtaining this information.
101 *
102 * @return the undeclared checked exception that was thrown
103 */
104 public Throwable getUndeclaredThrowable() {
105 return undeclaredThrowable;
106 }
107
108 /**
109 * Returns the cause of this exception (the {@code Throwable}
110 * instance wrapped in this {@code UndeclaredThrowableException},
111 * which may be {@code null}).
112 *
113 * @return the cause of this exception.
114 * @since 1.4
115 */
116 public Throwable getCause() {
117 return undeclaredThrowable;
118 }
119 }
|