< prev index next >

src/java.base/share/classes/java/lang/reflect/InvocationTargetException.java

Print this page

        

*** 23,32 **** --- 23,39 ---- * questions. */ package java.lang.reflect; + import jdk.internal.misc.SharedSecrets; + + import java.io.IOException; + import java.io.ObjectInputStream; + import java.io.ObjectOutputStream; + import java.io.ObjectStreamField; + /** * InvocationTargetException is a checked exception that wraps * an exception thrown by an invoked method or constructor. * * <p>As of release 1.4, this exception has been retrofitted to conform to
*** 45,64 **** * Use serialVersionUID from JDK 1.1.X for interoperability */ private static final long serialVersionUID = 4085088731926701167L; /** - * This field holds the target if the - * InvocationTargetException(Throwable target) constructor was - * used to instantiate the object - * - * @serial - * - */ - private Throwable target; - - /** * Constructs an {@code InvocationTargetException} with * {@code null} as the target exception. */ protected InvocationTargetException() { super((Throwable)null); // Disallow initCause --- 52,61 ----
*** 68,91 **** * Constructs a InvocationTargetException with a target exception. * * @param target the target exception */ public InvocationTargetException(Throwable target) { ! super((Throwable)null); // Disallow initCause ! this.target = target; } /** * Constructs a InvocationTargetException with a target exception * and a detail message. * * @param target the target exception * @param s the detail message */ public InvocationTargetException(Throwable target, String s) { ! super(s, null); // Disallow initCause ! this.target = target; } /** * Get the thrown target exception. * --- 65,86 ---- * Constructs a InvocationTargetException with a target exception. * * @param target the target exception */ public InvocationTargetException(Throwable target) { ! super(null, target); // Disallow initCause } /** * Constructs a InvocationTargetException with a target exception * and a detail message. * * @param target the target exception * @param s the detail message */ public InvocationTargetException(Throwable target, String s) { ! super(s, target); // Disallow initCause } /** * Get the thrown target exception. *
*** 94,112 **** * obtaining this information. * * @return the thrown target exception (cause of this exception). */ public Throwable getTargetException() { ! return target; } /** ! * Returns the cause of this exception (the thrown target exception, ! * which may be {@code null}). * ! * @return the cause of this exception. ! * @since 1.4 */ ! public Throwable getCause() { ! return target; } } --- 89,132 ---- * obtaining this information. * * @return the thrown target exception (cause of this exception). */ public Throwable getTargetException() { ! return super.getCause(); } /** ! * Serializable fields for UndeclaredThrowableException. * ! * @serialField target Throwable */ ! private static final ObjectStreamField[] serialPersistentFields = { ! new ObjectStreamField("target", Throwable.class) ! }; ! ! /* ! * Reconstitutes the InvocationTargetException instance from a stream ! * and initialize the cause properly when deserializing from an older ! * version. ! * ! * The getException and getCause method returns the private "target" field ! * in the older implementation and InvocationTargetException::cause ! * was set to null. ! */ ! private void readObject(ObjectInputStream s) throws IOException, ClassNotFoundException { ! ObjectInputStream.GetField fields = s.readFields(); ! Throwable exception = (Throwable) fields.get("target", null); ! if (exception != null) { ! SharedSecrets.getJavaLangAccess().setCause(this, exception); ! } ! } ! ! /* ! * To maintain compatibility with older implementation, write a serial ! * "target" field with the cause as the value. ! */ ! private void writeObject(ObjectOutputStream out) throws IOException { ! ObjectOutputStream.PutField fields = out.putFields(); ! fields.put("target", super.getCause()); ! out.writeFields(); } }
< prev index next >