1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Licensed to the Apache Software Foundation (ASF) under one or more
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  contributor license agreements.  See the NOTICE file distributed with
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  this work for additional information regarding copyright ownership.
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  The ASF licenses this file to You under the Apache License, Version 2.0
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  (the "License"); you may not use this file except in compliance with
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  the License.  You may obtain a copy of the License at
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  Unless required by applicable law or agreed to in writing, software
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  distributed under the License is distributed on an "AS IS" BASIS,
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  See the License for the specific language governing permissions and
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *  limitations under the License.
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.io;
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/**
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Signals that the {@link ObjectInputStream#readObject()} method has detected
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an exception marker in the input stream. This marker indicates that exception
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * occurred when the object was serialized, and this marker was inserted instead
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the original object. It is a way to "propagate" an exception from the code
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that attempted to write the object to the code that is attempting to read the
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * object.
27f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes *
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see ObjectInputStream#readObject()
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class WriteAbortedException extends ObjectStreamException {
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static final long serialVersionUID = -3326426625597282442L;
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * The exception that occured when writeObject() was attempting to serialize
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * the object.
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Exception detail;
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Constructs a new {@code WriteAbortedException} with its stack trace,
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * detail message and the exception which caused the underlying problem when
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * serializing the object filled in.
44f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param detailMessage
46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the detail message for this exception.
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @param rootCause
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     *            the exception that was thrown when serializing the object.
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public WriteAbortedException(String detailMessage, Exception rootCause) {
51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        super(detailMessage);
52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        detail = rootCause;
53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        initCause(rootCause);
54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the extra information message which was provided when this exception
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * was created. Returns {@code null} if no message was provided at creation
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * time.
60f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the exception message.
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public String getMessage() {
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        String msg = super.getMessage();
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        if (detail != null) {
67f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes            msg = msg + "; " + detail.toString();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return msg;
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    /**
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * Gets the cause of this exception or {@code null} if there is no cause.
74f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes     *
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     * @return the exception cause.
76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project     */
77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    @Override
78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public Throwable getCause() {
79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return detail;
80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
82