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 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 XMLSecurityException extends Exception {
65  
66      /**
67       *
68       */
69      private static final long serialVersionUID = 1L;
70  
71      /** Field msgID */
72      protected String msgID;
73  
74      /**
75       * Constructor XMLSecurityException
76       *
77       */
78      public XMLSecurityException() {
79          super("Missing message string");
80  
81          this.msgID = null;
82      }
83  
84      /**
85       * Constructor XMLSecurityException
86       *
87       * @param msgID
88       */
89      public XMLSecurityException(String msgID) {
90          super(I18n.getExceptionMessage(msgID));
91  
92          this.msgID = msgID;
93      }
94  
95      /**
96       * Constructor XMLSecurityException
97       *
98       * @param msgID
99       * @param exArgs
100      */
101     public XMLSecurityException(String msgID, Object exArgs[]) {
102 
103         super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs));
104 
105         this.msgID = msgID;
106     }
107 
108     /**
109      * Constructor XMLSecurityException
110      *
111      * @param originalException
112      */
113     public XMLSecurityException(Exception originalException) {
114 
115         super("Missing message ID to locate message string in resource bundle \""
116               + Constants.exceptionMessagesResourceBundleBase
117               + "\". Original Exception was a "
118               + originalException.getClass().getName() + " and message "
119               + originalException.getMessage(), originalException);
120     }
121 
122     /**
123      * Constructor XMLSecurityException
124      *
125      * @param msgID
126      * @param originalException
127      */
128     public XMLSecurityException(String msgID, Exception originalException) {
129         super(I18n.getExceptionMessage(msgID, originalException), originalException);
130 
131         this.msgID = msgID;
132     }
133 
134     /**
135      * Constructor XMLSecurityException
136      *
137      * @param msgID
138      * @param exArgs
139      * @param originalException
140      */
141     public XMLSecurityException(String msgID, Object exArgs[], Exception originalException) {
142         super(MessageFormat.format(I18n.getExceptionMessage(msgID), exArgs), originalException);
143 
144         this.msgID = msgID;
145     }
146 
147     /**
148      * Method getMsgID
149      *
150      * @return the messageId
151      */
152     public String getMsgID() {
153         if (msgID == null) {
154             return "Missing message ID";
155         }
156         return msgID;
157     }
158 
159     /** @inheritDoc */
160     public String toString() {
161         String s = this.getClass().getName();
162         String message = super.getLocalizedMessage();
163 
164         if (message != null) {
165             message = s + ": " + message;
166         } else {
167             message = s;
168         }
169 
170         if (super.getCause() != null) {
171             message = message + "\nOriginal Exception was " + super.getCause().toString();
172         }
173 
174         return message;
175     }
176 
177     /**
178      * Method printStackTrace
179      *
180      */
181     public void printStackTrace() {
182         synchronized (System.err) {
183             super.printStackTrace(System.err);
184         }
185     }
186 
187     /**
188      * Method printStackTrace
189      *
190      * @param printwriter
191      */
192     public void printStackTrace(PrintWriter printwriter) {
193         super.printStackTrace(printwriter);
194     }
195 
196     /**
197      * Method printStackTrace
198      *
199      * @param printstream
200      */
201     public void printStackTrace(PrintStream printstream) {
202         super.printStackTrace(printstream);
203     }
204 
205     /**
206      * Method getOriginalException
207      *
208      * @return the original exception
209      */
210     public Exception getOriginalException() {
211         if (this.getCause() instanceof Exception) {
212             return (Exception)this.getCause();
213         }
214         return null;
215     }
216 }