View Javadoc
1   /*
2    * reserved comment block
3    * DO NOT REMOVE OR ALTER!
4    */
5   /*
6    * Copyright 2001, 2002,2004 The Apache Software Foundation.
7    *
8    * Licensed under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
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  
21  package com.sun.org.apache.xerces.internal.impl.dv;
22  
23  import com.sun.org.apache.xerces.internal.utils.SecuritySupport;
24  import java.util.ResourceBundle;
25  import java.util.PropertyResourceBundle;
26  import java.util.MissingResourceException;
27  
28  /**
29   * Base class for datatype exceptions. For DTD types, the exception can be
30   * created from an error message. For Schema types, it needs an error code
31   * (as defined in Appendix C of the structure spec), plus an array of arguents,
32   * for error message substitution.
33   *
34   * @xerces.internal
35   *
36   * @author Sandy Gao, IBM
37   *
38   * @version $Id: DatatypeException.java,v 1.6 2010-11-01 04:39:43 joehw Exp $
39   */
40  public class DatatypeException extends Exception {
41  
42      /** Serialization version. */
43      static final long serialVersionUID = 1940805832730465578L;
44  
45      // used to store error code and error substitution arguments
46      protected String key;
47      protected Object[] args;
48  
49      /**
50       * Create a new datatype exception by providing an error code and a list
51       * of error message substitution arguments.
52       *
53       * @param key  error code
54       * @param args error arguments
55       */
56      public DatatypeException(String key, Object[] args) {
57          super(key);
58          this.key = key;
59          this.args = args;
60      }
61  
62      /**
63       * Return the error code
64       *
65       * @return  error code
66       */
67      public String getKey() {
68          return key;
69      }
70  
71      /**
72       * Return the list of error arguments
73       *
74       * @return  error arguments
75       */
76      public Object[] getArgs() {
77          return args;
78      }
79  
80      /**
81       * Overrides this method to get the formatted&localized error message.
82       *
83       * REVISIT: the system locale is used to load the property file.
84       *          do we want to allow the appilcation to specify a
85       *          different locale?
86       */
87      public String getMessage() {
88          ResourceBundle resourceBundle = null;
89          resourceBundle = SecuritySupport.getResourceBundle("com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages");
90          if (resourceBundle == null)
91              throw new MissingResourceException("Property file not found!", "com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", key);
92  
93          String msg = resourceBundle.getString(key);
94          if (msg == null) {
95              msg = resourceBundle.getString("BadMessageKey");
96              throw new MissingResourceException(msg, "com.sun.org.apache.xerces.internal.impl.msg.XMLSchemaMessages", key);
97          }
98  
99          if (args != null) {
100             try {
101                 msg = java.text.MessageFormat.format(msg, args);
102             } catch (Exception e) {
103                 msg = resourceBundle.getString("FormatFailed");
104                 msg += " " + resourceBundle.getString(key);
105             }
106         }
107 
108         return msg;
109     }
110 }