001: //--------------------------------------------------------------------------
002: // Copyright (c) 1998-2004, Drew Davidson and Luke Blanshard
003: // All rights reserved.
004: //
005: // Redistribution and use in source and binary forms, with or without
006: // modification, are permitted provided that the following conditions are
007: // met:
008: //
009: // Redistributions of source code must retain the above copyright notice,
010: // this list of conditions and the following disclaimer.
011: // Redistributions in binary form must reproduce the above copyright
012: // notice, this list of conditions and the following disclaimer in the
013: // documentation and/or other materials provided with the distribution.
014: // Neither the name of the Drew Davidson nor the names of its contributors
015: // may be used to endorse or promote products derived from this software
016: // without specific prior written permission.
017: //
018: // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
019: // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
020: // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
021: // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
022: // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
023: // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
024: // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
025: // OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
026: // AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
027: // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
028: // THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
029: // DAMAGE.
030: //--------------------------------------------------------------------------
031: package ognl;
032:
033: /**
034: * Superclass for OGNL exceptions, incorporating an optional encapsulated exception.
035: * @author Luke Blanshard (blanshlu@netscape.net)
036: * @author Drew Davidson (drew@ognl.org)
037: */
038: public class OgnlException extends Exception {
039: /**
040: * The root evaluation of the expression when the exception was thrown
041: */
042: private Evaluation evaluation;
043:
044: /**
045: * Why this exception was thrown.
046: * @serial
047: */
048: private Throwable reason;
049:
050: /** Constructs an OgnlException with no message or encapsulated exception. */
051: public OgnlException() {
052: this (null, null);
053: }
054:
055: /**
056: * Constructs an OgnlException with the given message but no encapsulated exception.
057: * @param msg the exception's detail message
058: */
059: public OgnlException(String msg) {
060: this (msg, null);
061: }
062:
063: /**
064: * Constructs an OgnlException with the given message and encapsulated exception.
065: * @param msg the exception's detail message
066: * @param reason the encapsulated exception
067: */
068: public OgnlException(String msg, Throwable reason) {
069: super (msg);
070: this .reason = reason;
071: }
072:
073: /**
074: * Returns the encapsulated exception, or null if there is none.
075: * @return the encapsulated exception
076: */
077: public Throwable getReason() {
078: return reason;
079: }
080:
081: /**
082: Returns the Evaluation that was the root evaluation when the exception was
083: thrown.
084: */
085: public Evaluation getEvaluation() {
086: return evaluation;
087: }
088:
089: /**
090: Sets the Evaluation that was current when this exception was thrown.
091: */
092: public void setEvaluation(Evaluation value) {
093: evaluation = value;
094: }
095:
096: /**
097: * Returns a string representation of this exception.
098: * @return a string representation of this exception
099: */
100: public String toString() {
101: if (reason == null)
102: return super .toString();
103: return super .toString() + " [" + reason + "]";
104: }
105:
106: /**
107: * Prints the stack trace for this (and possibly the encapsulated) exception on
108: * System.err.
109: */
110: public void printStackTrace() {
111: printStackTrace(System.err);
112: }
113:
114: /**
115: * Prints the stack trace for this (and possibly the encapsulated) exception on the
116: * given print stream.
117: */
118: public void printStackTrace(java.io.PrintStream s) {
119: synchronized (s) {
120: super .printStackTrace(s);
121: if (reason != null) {
122: s.println("/-- Encapsulated exception ------------\\");
123: reason.printStackTrace(s);
124: s.println("\\--------------------------------------/");
125: }
126: }
127: }
128:
129: /**
130: * Prints the stack trace for this (and possibly the encapsulated) exception on the
131: * given print writer.
132: */
133: public void printStackTrace(java.io.PrintWriter s) {
134: synchronized (s) {
135: super .printStackTrace(s);
136: if (reason != null) {
137: s.println("/-- Encapsulated exception ------------\\");
138: reason.printStackTrace(s);
139: s.println("\\--------------------------------------/");
140: }
141: }
142: }
143: }
|