1 /***
2 * @(#)NestedCheckedException.java
3 *
4 * JFoxSOAF, Service-Oriented Application Framework
5 *
6 * Copyright(c) JFoxSOAF Team
7 *
8 * Licensed under the GNU LGPL, Version 2.1 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * http://www.gnu.org/copyleft/lesser.html
13 *
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 *
20 * For more information, please visit:
21 * http://www.jfox.cn/confluence/display/JFoxSOAF/Home
22 * http://www.huihoo.org/jfox/jfoxsoaf
23 */
24
25 package org.huihoo.jfox.soaf.exception;
26
27 import java.io.PrintStream;
28 import java.io.PrintWriter;
29
30 /***
31 * Superclass for all checked Exceptions in JFoxSOAF.
32 *
33 * @author <a href="mailto:founder_chen@yahoo.com.cn">Peter Cheng </a>
34 * @version $Revision: 1.9 $ $Date: 2005/05/22 06:47:24 $
35 * @version Revision: 1.0
36 */
37
38 public class NestedCheckedException extends Exception {
39
40 /***
41 * The exception that caused this one.
42 */
43 private Throwable cause;
44
45 /***
46 * Default Constructor.
47 */
48 public NestedCheckedException() {
49 super();
50 }
51
52 /***
53 * Construct a new exception with no cause and the specified detail message.
54 * Note modern JVMs may still track the exception that caused this one.
55 *
56 * @param message the message detailing the exception.
57 */
58 public NestedCheckedException(final String message) {
59 super(message);
60 }
61
62 /***
63 * Construct a new exception with the specified cause and no detail message.
64 *
65 * @param cause the exception that caused this one.
66 */
67 public NestedCheckedException(final Throwable cause) {
68 this.cause = cause;
69 }
70
71 /***
72 * Construct a new exception with the specified cause and the specified
73 * detail message.
74 *
75 * @param message the message detailing the exception.
76 * @param cause the exception that caused this one.
77 */
78 public NestedCheckedException(final String message, final Throwable cause) {
79 super(message);
80 this.cause = cause;
81 }
82
83 /***
84 * Retrieve the exception that caused this one.
85 *
86 * @return the exception that caused this one, or null if it was not set.
87 * @see Throwable#getCause() the method available since JDK 1.3 that is
88 * overridden by this method.
89 */
90 public Throwable getCause() {
91 return this.cause;
92 }
93
94 /***
95 * Returns the detail message string of this throwable.
96 *
97 * @see java.lang.Throwable#getMessage()
98 */
99 public String getMessage() {
100 if (this.cause == null || this.cause == this) {
101 return super.getMessage();
102 } else {
103 return new StringBuffer().append(super.getMessage()).append(
104 ": nested throwable: ").append(
105 this.cause.getClass().getName()).append(": ").append(
106 this.cause.getMessage()).toString();
107 }
108 }
109
110 /***
111 * Prints this throwable and its backtrace to the standard error stream
112 *
113 * @see java.lang.Throwable#printStackTrace()
114 */
115 public void printStackTrace() {
116 printStackTrace(System.err);
117 }
118
119 /***
120 * Print the composite message and the embedded stack trace to the specified
121 * stream.
122 *
123 * @param printStrem
124 */
125 public void printStackTrace(PrintStream printStrem) {
126 if (this.cause == null || this.cause == this) {
127 super.printStackTrace(printStrem);
128 } else {
129 cause.printStackTrace(printStrem);
130 }
131
132 }
133
134 /***
135 * Print the composite message and the embedded stack trace to the specified
136 * writer.
137 *
138 * @param printWriter
139 */
140 public void printStackTrace(PrintWriter printWriter) {
141 if (this.cause == null || this.cause == this) {
142 super.printStackTrace(printWriter);
143 } else {
144 cause.printStackTrace(printWriter);
145 }
146
147 }
148 }