blob: 69a803b04c98ebc8070839d7ff8cd0dc92e21285 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001package com.sun.org.apache.xml.internal.security.exceptions;
2
3import java.io.PrintStream;
4import java.io.PrintWriter;
5import java.text.MessageFormat;
6
7import com.sun.org.apache.xml.internal.security.utils.Constants;
8import com.sun.org.apache.xml.internal.security.utils.I18n;
9
10/**
11 * The mother of all runtime Exceptions in this bundle. It allows exceptions to have
12 * their messages translated to the different locales.
13 *
14 * The <code>xmlsecurity_en.properties</code> file contains this line:
15 * <pre>
16 * xml.WrongElement = Can't create a {0} from a {1} element
17 * </pre>
18 *
19 * Usage in the Java source is:
20 * <pre>
21 * {
22 * Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" };
23 *
24 * throw new XMLSecurityException("xml.WrongElement", exArgs);
25 * }
26 * </pre>
27 *
28 * Additionally, if another Exception has been caught, we can supply it, too>
29 * <pre>
30 * try {
31 * ...
32 * } catch (Exception oldEx) {
33 * Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" };
34 *
35 * throw new XMLSecurityException("xml.WrongElement", exArgs, oldEx);
36 * }
37 * </pre>
38 *
39 *
40 * @author Christian Geuer-Pollmann
41 */
42public class XMLSecurityRuntimeException
43 extends RuntimeException {
44 /**
45 *
46 */
47 private static final long serialVersionUID = 1L;
48
49 /** Field originalException */
50 protected Exception originalException = null;
51
52 /** Field msgID */
53 protected String msgID;
54
55 /**
56 * Constructor XMLSecurityRuntimeException
57 *
58 */
59 public XMLSecurityRuntimeException() {
60
61 super("Missing message string");
62
63 this.msgID = null;
64 this.originalException = null;
65 }
66
67 /**
68 * Constructor XMLSecurityRuntimeException
69 *
70 * @param _msgID
71 */
72 public XMLSecurityRuntimeException(String _msgID) {
73
74 super(I18n.getExceptionMessage(_msgID));
75
76 this.msgID = _msgID;
77 this.originalException = null;
78 }
79
80 /**
81 * Constructor XMLSecurityRuntimeException
82 *
83 * @param _msgID
84 * @param exArgs
85 */
86 public XMLSecurityRuntimeException(String _msgID, Object exArgs[]) {
87
88 super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
89
90 this.msgID = _msgID;
91 this.originalException = null;
92 }
93
94 /**
95 * Constructor XMLSecurityRuntimeException
96 *
97 * @param _originalException
98 */
99 public XMLSecurityRuntimeException(Exception _originalException) {
100
101 super("Missing message ID to locate message string in resource bundle \""
102 + Constants.exceptionMessagesResourceBundleBase
103 + "\". Original Exception was a "
104 + _originalException.getClass().getName() + " and message "
105 + _originalException.getMessage());
106
107 this.originalException = _originalException;
108 }
109
110 /**
111 * Constructor XMLSecurityRuntimeException
112 *
113 * @param _msgID
114 * @param _originalException
115 */
116 public XMLSecurityRuntimeException(String _msgID, Exception _originalException) {
117
118 super(I18n.getExceptionMessage(_msgID, _originalException));
119
120 this.msgID = _msgID;
121 this.originalException = _originalException;
122 }
123
124 /**
125 * Constructor XMLSecurityRuntimeException
126 *
127 * @param _msgID
128 * @param exArgs
129 * @param _originalException
130 */
131 public XMLSecurityRuntimeException(String _msgID, Object exArgs[],
132 Exception _originalException) {
133
134 super(MessageFormat.format(I18n.getExceptionMessage(_msgID), exArgs));
135
136 this.msgID = _msgID;
137 this.originalException = _originalException;
138 }
139
140 /**
141 * Method getMsgID
142 *
143 * @return the messageId
144 */
145 public String getMsgID() {
146
147 if (msgID == null) {
148 return "Missing message ID";
149 }
150 return msgID;
151 }
152
153 /** @inheritDoc */
154 public String toString() {
155
156 String s = this.getClass().getName();
157 String message = super.getLocalizedMessage();
158
159 if (message != null) {
160 message = s + ": " + message;
161 } else {
162 message = s;
163 }
164
165 if (originalException != null) {
166 message = message + "\nOriginal Exception was "
167 + originalException.toString();
168 }
169
170 return message;
171 }
172
173 /**
174 * Method printStackTrace
175 *
176 */
177 public void printStackTrace() {
178
179 synchronized (System.err) {
180 super.printStackTrace(System.err);
181
182 if (this.originalException != null) {
183 this.originalException.printStackTrace(System.err);
184 }
185 }
186 }
187
188 /**
189 * Method printStackTrace
190 *
191 * @param printwriter
192 */
193 public void printStackTrace(PrintWriter printwriter) {
194
195 super.printStackTrace(printwriter);
196
197 if (this.originalException != null) {
198 this.originalException.printStackTrace(printwriter);
199 }
200 }
201
202 /**
203 * Method printStackTrace
204 *
205 * @param printstream
206 */
207 public void printStackTrace(PrintStream printstream) {
208
209 super.printStackTrace(printstream);
210
211 if (this.originalException != null) {
212 this.originalException.printStackTrace(printstream);
213 }
214 }
215
216 /**
217 * Method getOriginalException
218 *
219 * @return the original exception
220 */
221 public Exception getOriginalException() {
222 return originalException;
223 }
224}