1 /* 2 * Copyright (c) 1996, 2005, Oracle and/or its affiliates. All rights reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Oracle designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Oracle in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 22 * or visit www.oracle.com if you need additional information or have any 23 * questions. 24 */ 25 26 package java.io; 27 28 /** 29 * Signals that one of the ObjectStreamExceptions was thrown during a 30 * write operation. Thrown during a read operation when one of the 31 * ObjectStreamExceptions was thrown during a write operation. The 32 * exception that terminated the write can be found in the detail 33 * field. The stream is reset to it's initial state and all references 34 * to objects already deserialized are discarded. 35 * 36 * <p>As of release 1.4, this exception has been retrofitted to conform to 37 * the general purpose exception-chaining mechanism. The "exception causing 38 * the abort" that is provided at construction time and 39 * accessed via the public {@link #detail} field is now known as the 40 * <i>cause</i>, and may be accessed via the {@link Throwable#getCause()} 41 * method, as well as the aforementioned "legacy field." 42 * 43 * @author unascribed 44 * @since 1.1 45 */ 46 public class WriteAbortedException extends ObjectStreamException { 47 @java.io.Serial 48 private static final long serialVersionUID = -3326426625597282442L; 49 50 /** 51 * Exception that was caught while writing the ObjectStream. 52 * 53 * <p>This field predates the general-purpose exception chaining facility. 54 * The {@link Throwable#getCause()} method is now the preferred means of 55 * obtaining this information. 56 * 57 * @serial 58 */ 59 public Exception detail; 60 61 /** 62 * Constructs a WriteAbortedException with a string describing 63 * the exception and the exception causing the abort. 64 * @param s String describing the exception. 65 * @param ex Exception causing the abort. 66 */ 67 public WriteAbortedException(String s, Exception ex) { 68 super(s); 69 initCause(null); // Disallow subsequent initCause 70 detail = ex; 71 } 72 73 /** 74 * Produce the message and include the message from the nested 75 * exception, if there is one. 76 */ 77 public String getMessage() { 78 if (detail == null) 79 return super.getMessage(); 80 else 81 return super.getMessage() + "; " + detail.toString(); 82 } 83 84 /** 85 * Returns the exception that terminated the operation (the <i>cause</i>). 86 * 87 * @return the exception that terminated the operation (the <i>cause</i>), 88 * which may be null. 89 * @since 1.4 90 */ 91 public Throwable getCause() { 92 return detail; 93 } 94 }