View Javadoc
1   /*
2    * reserved comment block
3    * DO NOT REMOVE OR ALTER!
4    */
5   /**
6    * Licensed to the Apache Software Foundation (ASF) under one
7    * or more contributor license agreements. See the NOTICE file
8    * distributed with this work for additional information
9    * regarding copyright ownership. The ASF licenses this file
10   * to you under the Apache License, Version 2.0 (the
11   * "License"); you may not use this file except in compliance
12   * with the License. You may obtain a copy of the License at
13   *
14   * http://www.apache.org/licenses/LICENSE-2.0
15   *
16   * Unless required by applicable law or agreed to in writing,
17   * software distributed under the License is distributed on an
18   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
19   * KIND, either express or implied. See the License for the
20   * specific language governing permissions and limitations
21   * under the License.
22   */
23  package com.sun.org.apache.xml.internal.security.exceptions;
24  
25  import java.io.PrintStream;
26  import java.io.PrintWriter;
27  import java.text.MessageFormat;
28  
29  import com.sun.org.apache.xml.internal.security.utils.Constants;
30  import com.sun.org.apache.xml.internal.security.utils.I18n;
31  
32  /**
33   * The mother of all runtime Exceptions in this bundle. It allows exceptions to have
34   * their messages translated to the different locales.
35   *
36   * The <code>xmlsecurity_en.properties</code> file contains this line:
37   * <pre>
38   * xml.WrongElement = Can't create a {0} from a {1} element
39   * </pre>
40   *
41   * Usage in the Java source is:
42   * <pre>
43   * {
44   *    Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" };
45   *
46   *    throw new XMLSecurityException("xml.WrongElement", exArgs);
47   * }
48   * </pre>
49   *
50   * Additionally, if another Exception has been caught, we can supply it, too>
51   * <pre>
52   * try {
53   *    ...
54   * } catch (Exception oldEx) {
55   *    Object exArgs[] = { Constants._TAG_TRANSFORMS, "BadElement" };
56   *
57   *    throw new XMLSecurityException("xml.WrongElement", exArgs, oldEx);
58   * }
59   * </pre>
60   *
61   *
62   * @author Christian Geuer-Pollmann
63   */
64  public class XMLSecurityRuntimeException extends RuntimeException {
65  
66      private static final long serialVersionUID = 1L;
67  
68      /** Field msgID */
69      protected String msgID;
70  
71      /**
72       * Constructor XMLSecurityRuntimeException
73       *
74       */
75      public XMLSecurityRuntimeException() {
76          super("Missing message string");
77  
78          this.msgID = null;
79      }
80  
81      /**
82       * Constructor XMLSecurityRuntimeException
83       *
84       * @param msgID
85       */
86      public XMLSecurityRuntimeException(String msgID) {
87          super(I18n.getExceptionMessage(msgID));
88  
89          this.msgID = msgID;
90      }
91  
92      /**
93       * Constructor XMLSecurityRuntimeException
94       *
95       * @param msgID
96       * @param exArgs
97       */
98      public XMLSecurityRuntimeException(String msgID, Object exArgs[]) {
99          super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
100 
101         this.msgID = msgID;
102     }
103 
104     /**
105      * Constructor XMLSecurityRuntimeException
106      *
107      * @param originalException
108      */
109     public XMLSecurityRuntimeException(Exception originalException) {
110         super("Missing message ID to locate message string in resource bundle \""
111               + Constants.exceptionMessagesResourceBundleBase
112               + "\". Original Exception was a "
113               + originalException.getClass().getName() + " and message "
114               + originalException.getMessage(), originalException);
115     }
116 
117     /**
118      * Constructor XMLSecurityRuntimeException
119      *
120      * @param msgID
121      * @param originalException
122      */
123     public XMLSecurityRuntimeException(String msgID, Exception originalException) {
124         super(I18n.getExceptionMessage(msgID, originalException), originalException);
125 
126         this.msgID = msgID;
127     }
128 
129     /**
130      * Constructor XMLSecurityRuntimeException
131      *
132      * @param msgID
133      * @param exArgs
134      * @param originalException
135      */
136     public XMLSecurityRuntimeException(String msgID, Object exArgs[], Exception originalException) {
137         super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
138 
139         this.msgID = msgID;
140     }
141 
142     /**
143      * Method getMsgID
144      *
145      * @return the messageId
146      */
147     public String getMsgID() {
148         if (msgID == null) {
149             return "Missing message ID";
150         }
151         return msgID;
152     }
153 
154     /** @inheritDoc */
155     public String toString() {
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 (this.getCause() != null) {
166             message = message + "\nOriginal Exception was " + this.getCause().toString();
167         }
168 
169         return message;
170     }
171 
172     /**
173      * Method printStackTrace
174      *
175      */
176     public void printStackTrace() {
177         synchronized (System.err) {
178             super.printStackTrace(System.err);
179         }
180     }
181 
182     /**
183      * Method printStackTrace
184      *
185      * @param printwriter
186      */
187     public void printStackTrace(PrintWriter printwriter) {
188         super.printStackTrace(printwriter);
189     }
190 
191     /**
192      * Method printStackTrace
193      *
194      * @param printstream
195      */
196     public void printStackTrace(PrintStream printstream) {
197         super.printStackTrace(printstream);
198     }
199 
200     /**
201      * Method getOriginalException
202      *
203      * @return the original exception
204      */
205     public Exception getOriginalException() {
206         if (this.getCause() instanceof Exception) {
207             return (Exception)this.getCause();
208         }
209         return null;
210     }
211 
212 }