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 }