View Javadoc

    1   /*
    2    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/saxpath/SAXPathException.java,v 1.12 2005/09/24 11:46:45 elharo Exp $
    3    * $Revision: 1.12 $
    4    * $Date: 2005/09/24 11:46:45 $
    5    *
    6    * ====================================================================
    7    *
    8    * Copyright (C) 2000-2002 bob mcwhirter & James Strachan.
    9    * All rights reserved.
    10   *
    11   * Redistribution and use in source and binary forms, with or without
    12   * modification, are permitted provided that the following conditions
    13   * are met:
    14   *
    15   * 1. Redistributions of source code must retain the above copyright
    16   *    notice, this list of conditions, and the following disclaimer.
    17   *
    18   * 2. Redistributions in binary form must reproduce the above copyright
    19   *    notice, this list of conditions, and the disclaimer that follows
    20   *    these conditions in the documentation and/or other materials
    21   *    provided with the distribution.
    22   *
    23   * 3. The name "Jaxen" must not be used to endorse or promote products
    24   *    derived from this software without prior written permission.  For
    25   *    written permission, please contact license@jaxen.org.
    26   *
    27   * 4. Products derived from this software may not be called "Jaxen", nor
    28   *    may "Jaxen" appear in their name, without prior written permission
    29   *    from the Jaxen Project Management (pm@jaxen.org).
    30   *
    31   * In addition, we request (but do not require) that you include in the
    32   * end-user documentation provided with the redistribution and/or in the
    33   * software itself an acknowledgement equivalent to the following:
    34   *     "This product includes software developed by the
    35   *      Jaxen Project <http://www.jaxen.org/>."
    36   * Alternatively, the acknowledgment may be graphical using the logos
    37   * available at http://www.jaxen.org/
    38   *
    39   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    40   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    41   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    42   * DISCLAIMED.  IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
    43   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    44   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    45   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    46   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    47   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    48   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    49   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    50   * SUCH DAMAGE.
    51   *
    52   * ====================================================================
    53   * This software consists of voluntary contributions made by many
    54   * individuals on behalf of the Jaxen Project and was originally
    55   * created by bob mcwhirter <bob@werken.com> and
    56   * James Strachan <jstrachan@apache.org>.  For more information on the
    57   * Jaxen Project, please see <http://www.jaxen.org/>.
    58   *
    59   * $Id: SAXPathException.java,v 1.12 2005/09/24 11:46:45 elharo Exp $
    60   */
    61
    62  package org.jaxen.saxpath;
    63
    64  import java.io.PrintStream;
    65  import java.io.PrintWriter;
    66
    67  /*** Base of all SAXPath exceptions.
    68   *
    69   *  @author bob mcwhirter (bob@werken.com)
    70   */
    71  public class SAXPathException extends Exception
    72  {
    73
    74      private static double javaVersion = 1.4;
    75
    76      static {
    77          try {
    78              String versionString = System.getProperty("java.version");
    79              versionString = versionString.substring(0, 3);
    80              javaVersion = Double.valueOf(versionString).doubleValue();
    81          }
    82          catch (Exception ex) {
    83              // The version string format changed so presumably it's
    84              // 1.4 or later.
    85          }
    86      }
    87
    88      /*** Create a new SAXPathException with a given message.
    89       *
    90       *  @param message the error message
    91       */
    92      public SAXPathException(String message)
    93      {
    94          super( message );
    95      }
    96
    97      /*** Create a new SAXPathException based on another exception
    98       *
    99       *  @param cause the error source
    100      */
    101     public SAXPathException(Throwable cause)
    102     {
    103     	super ( cause.getMessage() );
    104     	initCause(cause);
    105     }
    106
    107     /***
    108      * Create a new SAXPathException with the specified detail message
    109      * and root cause.
    110      *
    111      * @param message the detail message
    112      * @param cause the cause of this exception
    113      */
    114     public SAXPathException(String message, Throwable cause) {
    115         super( message );
    116         initCause(cause);
    117     }
    118
    119
    120     private Throwable cause;
    121     private boolean causeSet = false;
    122
    123     /***
    124      * Returns the exception that caused this exception.
    125      * This is necessary to implement Java 1.4 chained exception
    126      * functionality in a Java 1.3-compatible way.
    127      *
    128      * @return the exception that caused this exception
    129      */
    130     public Throwable getCause() {
    131         return cause;
    132     }
    133
    134
    135     /***
    136      * Sets the exception that caused this exception.
    137      * This is necessary to implement Java 1.4 chained exception
    138      * functionality in a Java 1.3-compatible way.
    139      *
    140      * @param cause the exception wrapped in this runtime exception
    141      *
    142      * @return this exception
    143      */
    144     public Throwable initCause(Throwable cause) {
    145         if (causeSet) throw new IllegalStateException("Cause cannot be reset");
    146         if (cause == this) throw new IllegalArgumentException("Exception cannot be its own cause");
    147         causeSet = true;
    148         this.cause = cause;
    149         return this;
    150     }
    151
    152     /*** Print this exception's stack trace, followed by the
    153      *	source exception's trace, if any.
    154      *
    155      * @param s the stream on which to print the stack trace
    156      */
    157     public void printStackTrace ( PrintStream s )
    158     {
    159     	super.printStackTrace ( s );
    160     	if (javaVersion < 1.4 && getCause() != null) {
    161     	    s.print( "Caused by: " );
    162     	    getCause().printStackTrace( s );
    163     	}
    164     }
    165
    166     /*** Print this exception's stack trace, followed by the
    167      *	source exception's stack trace, if any.
    168      *
    169      * @param s the writer on which to print the stack trace
    170      */
    171     public void printStackTrace ( PrintWriter s )
    172     {
    173     	super.printStackTrace( s );
    174     	if (javaVersion < 1.4 && getCause() != null) {
    175     	    s.print( "Caused by: " );
    176     	    getCause().printStackTrace( s );
    177     	}
    178     }
    179
    180 }