View Javadoc

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