Home » xml-commons-external-1.4.01-src » javax » xml » datatype » [javadoc | source]

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *     http://www.apache.org/licenses/LICENSE-2.0
   10    *
   11    * Unless required by applicable law or agreed to in writing, software
   12    * distributed under the License is distributed on an "AS IS" BASIS,
   13    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   14    * See the License for the specific language governing permissions and
   15    * limitations under the License.
   16    */
   17   
   18   // $Id: DatatypeConfigurationException.java 569987 2007-08-27 04:08:46Z mrglavas $
   19   
   20   package javax.xml.datatype;
   21   
   22   import java.io.IOException;
   23   import java.io.ObjectInputStream;
   24   import java.io.PrintStream;
   25   import java.io.PrintWriter;
   26   import java.lang.reflect.Method;
   27   
   28   /**
   29    * <p>Indicates a serious configuration error.</p>
   30    *
   31    * @author <a href="mailto:Jeff.Suttor@Sun.com">Jeff Suttor</a>
   32    * @version $Revision: 569987 $, $Date: 2007-08-27 00:08:46 -0400 (Mon, 27 Aug 2007) $
   33    * @since 1.5
   34    */
   35   
   36   public class DatatypeConfigurationException extends Exception {
   37       
   38       /** Stream Unique Identifier. */
   39       private static final long serialVersionUID = -1699373159027047238L;
   40   
   41       /** This field is required to store the cause on JDK 1.3 and below. */
   42       private Throwable causeOnJDK13OrBelow;
   43       
   44       /** Indicates whether this class is being used in a JDK 1.4 context. */
   45       private transient boolean isJDK14OrAbove = false;
   46   
   47       /**
   48        * <p>Create a new <code>DatatypeConfigurationException</code> with
   49        * no specified detail message and cause.</p>
   50        */
   51       
   52       public DatatypeConfigurationException() {
   53           super();
   54       }
   55       
   56       /**
   57        * <p>Create a new <code>DatatypeConfigurationException</code> with
   58        * the specified detail message.</p>
   59        *
   60        * @param message The detail message.
   61        */
   62       
   63       public DatatypeConfigurationException(String message) {
   64           super(message);
   65       }
   66       
   67       /**
   68        * <p>Create a new <code>DatatypeConfigurationException</code> with
   69        * the specified detail message and cause.</p>
   70        *
   71        * @param message The detail message.
   72        * @param cause The cause.  A <code>null</code> value is permitted, and indicates that the cause is nonexistent or unknown.
   73        */
   74       
   75       public DatatypeConfigurationException(String message, Throwable cause) {
   76           super(message);
   77           initCauseByReflection(cause);
   78       }
   79       
   80       /**
   81        * <p>Create a new <code>DatatypeConfigurationException</code> with
   82        * the specified cause.</p>
   83        *
   84        * @param cause The cause.  A <code>null</code> value is permitted, and indicates that the cause is nonexistent or unknown.
   85        */
   86       
   87       public DatatypeConfigurationException(Throwable cause) {
   88           super(cause == null ? null : cause.toString());
   89           initCauseByReflection(cause);
   90       }
   91       
   92       /**
   93        * Print the the trace of methods from where the error
   94        * originated.  This will trace all nested exception
   95        * objects, as well as this object.
   96        */
   97       public void printStackTrace() {
   98           if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) {
   99               printStackTrace0(new PrintWriter(System.err, true));
  100           }
  101           else {
  102               super.printStackTrace();
  103           }
  104       }
  105   
  106       /**
  107        * Print the the trace of methods from where the error
  108        * originated.  This will trace all nested exception
  109        * objects, as well as this object.
  110        * @param s The stream where the dump will be sent to.
  111        */
  112       public void printStackTrace(PrintStream s) {
  113           if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) {
  114               printStackTrace0(new PrintWriter(s));
  115           }
  116           else {
  117               super.printStackTrace(s);
  118           }
  119       }
  120   
  121       /**
  122        * Print the the trace of methods from where the error
  123        * originated.  This will trace all nested exception
  124        * objects, as well as this object.
  125        * @param s The writer where the dump will be sent to.
  126        */
  127       public void printStackTrace(PrintWriter s) {
  128           if (!isJDK14OrAbove && causeOnJDK13OrBelow != null) {
  129               printStackTrace0(s);
  130           }
  131           else {
  132               super.printStackTrace(s);
  133           }
  134       }
  135       
  136       private void printStackTrace0(PrintWriter s) {
  137           causeOnJDK13OrBelow.printStackTrace(s);
  138           s.println("------------------------------------------");
  139           super.printStackTrace(s);
  140       }
  141       
  142       private void initCauseByReflection(Throwable cause) {
  143           causeOnJDK13OrBelow = cause;
  144           try {
  145               Method m = this.getClass().getMethod("initCause", new Class[] {Throwable.class});
  146               m.invoke(this, new Object[] {cause});
  147               isJDK14OrAbove = true;
  148           }
  149           // Ignore exception
  150           catch (Exception e) {}
  151       }
  152       
  153       private void readObject(ObjectInputStream in) 
  154           throws IOException, ClassNotFoundException {
  155           in.defaultReadObject();
  156           try {
  157               Method m1 = this.getClass().getMethod("getCause", new Class[] {});
  158               Throwable cause = (Throwable) m1.invoke(this, new Object[] {});
  159               if (causeOnJDK13OrBelow == null) {
  160                   causeOnJDK13OrBelow = cause;
  161               }
  162               else if (cause == null) {
  163                   Method m2 = this.getClass().getMethod("initCause", new Class[] {Throwable.class});
  164                   m2.invoke(this, new Object[] {causeOnJDK13OrBelow});
  165               }
  166               isJDK14OrAbove = true;
  167           }
  168           // Ignore exception
  169           catch (Exception e) {}
  170       }
  171   }

Home » xml-commons-external-1.4.01-src » javax » xml » datatype » [javadoc | source]