1/*
2 * Copyright (c) 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 * $Id: KeySelectorException.java,v 1.3 2005/05/10 15:47:42 mullan Exp $
27 */
28package javax.xml.crypto;
29
30import java.io.PrintStream;
31import java.io.PrintWriter;
32
33/**
34 * Indicates an exceptional condition thrown by a {@link KeySelector}.
35 *
36 * <p>A {@code KeySelectorException} can contain a cause: another
37 * throwable that caused this {@code KeySelectorException} to get thrown.
38 *
39 * @author Sean Mullan
40 * @author JSR 105 Expert Group
41 * @since 1.6
42 */
43public class KeySelectorException extends Exception {
44
45    private static final long serialVersionUID = -7480033639322531109L;
46
47    /**
48     * The throwable that caused this exception to get thrown, or
49     * {@code null} if this exception was not caused by another throwable
50     * or if the causative throwable is unknown.
51     *
52     * @serial
53     */
54    private Throwable cause;
55
56    /**
57     * Constructs a new {@code KeySelectorException} with
58     * {@code null} as its detail message.
59     */
60    public KeySelectorException() {
61        super();
62    }
63
64    /**
65     * Constructs a new {@code KeySelectorException} with the specified
66     * detail message.
67     *
68     * @param message the detail message
69     */
70    public KeySelectorException(String message) {
71        super(message);
72    }
73
74    /**
75     * Constructs a new {@code KeySelectorException} with the
76     * specified detail message and cause.
77     * <p>Note that the detail message associated with
78     * {@code cause} is <i>not</i> automatically incorporated in
79     * this exception's detail message.
80     *
81     * @param message the detail message
82     * @param cause the cause (A {@code null} value is permitted, and
83     *        indicates that the cause is nonexistent or unknown.)
84     */
85    public KeySelectorException(String message, Throwable cause) {
86        super(message);
87        this.cause = cause;
88    }
89
90    /**
91     * Constructs a new {@code KeySelectorException} with the specified
92     * cause and a detail message of
93     * {@code (cause==null ? null : cause.toString())}
94     * (which typically contains the class and detail message of
95     * {@code cause}).
96     *
97     * @param cause the cause (A {@code null} value is permitted, and
98     *        indicates that the cause is nonexistent or unknown.)
99     */
100    public KeySelectorException(Throwable cause) {
101        super(cause==null ? null : cause.toString());
102        this.cause = cause;
103    }
104
105    /**
106     * Returns the cause of this {@code KeySelectorException} or
107     * {@code null} if the cause is nonexistent or unknown.  (The
108     * cause is the throwable that caused this
109     * {@code KeySelectorException} to get thrown.)
110     *
111     * @return the cause of this {@code KeySelectorException} or
112     *         {@code null} if the cause is nonexistent or unknown.
113     */
114    public Throwable getCause() {
115        return cause;
116    }
117
118    /**
119     * Prints this {@code KeySelectorException}, its backtrace and
120     * the cause's backtrace to the standard error stream.
121     */
122    public void printStackTrace() {
123        super.printStackTrace();
124        //XXX print backtrace of cause
125    }
126
127    /**
128     * Prints this {@code KeySelectorException}, its backtrace and
129     * the cause's backtrace to the specified print stream.
130     *
131     * @param s {@code PrintStream} to use for output
132     */
133    public void printStackTrace(PrintStream s) {
134        super.printStackTrace(s);
135        //XXX print backtrace of cause
136    }
137
138    /**
139     * Prints this {@code KeySelectorException}, its backtrace and
140     * the cause's backtrace to the specified print writer.
141     *
142     * @param s {@code PrintWriter} to use for output
143     */
144    public void printStackTrace(PrintWriter s) {
145        super.printStackTrace(s);
146        //XXX print backtrace of cause
147    }
148}
149