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 private static final long serialVersionUID = -3326426625597282442L; 48 49 /** 50 * Exception that was caught while writing the ObjectStream. 51 * 52 * <p>This field predates the general-purpose exception chaining facility. 53 * The {@link Throwable#getCause()} method is now the preferred means of 54 * obtaining this information. 55 * 56 * @serial 57 */ 58 public Exception detail; 59 60 /** 61 * Constructs a WriteAbortedException with a string describing 62 * the exception and the exception causing the abort. 63 * @param s String describing the exception. 64 * @param ex Exception causing the abort. 65 */ WriteAbortedException(String s, Exception ex)66 public WriteAbortedException(String s, Exception ex) { 67 super(s); 68 initCause(null); // Disallow subsequent initCause 69 detail = ex; 70 } 71 72 /** 73 * Produce the message and include the message from the nested 74 * exception, if there is one. 75 */ getMessage()76 public String getMessage() { 77 if (detail == null) 78 return super.getMessage(); 79 else 80 return super.getMessage() + "; " + detail.toString(); 81 } 82 83 /** 84 * Returns the exception that terminated the operation (the <i>cause</i>). 85 * 86 * @return the exception that terminated the operation (the <i>cause</i>), 87 * which may be null. 88 * @since 1.4 89 */ getCause()90 public Throwable getCause() { 91 return detail; 92 } 93 } 94