001: /*
002: Copyright (c) 2002-2005, Dennis M. Sosnoski.
003: All rights reserved.
004:
005: Redistribution and use in source and binary forms, with or without modification,
006: are permitted provided that the following conditions are met:
007:
008: * Redistributions of source code must retain the above copyright notice, this
009: list of conditions and the following disclaimer.
010: * Redistributions in binary form must reproduce the above copyright notice,
011: this list of conditions and the following disclaimer in the documentation
012: and/or other materials provided with the distribution.
013: * Neither the name of JiBX nor the names of its contributors may be used
014: to endorse or promote products derived from this software without specific
015: prior written permission.
016:
017: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
018: ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
019: WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
020: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
021: ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
022: (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
023: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
024: ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
025: (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
026: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
027: */
028:
029: package org.jibx.runtime;
030:
031: import java.io.PrintStream;
032: import java.io.PrintWriter;
033:
034: /**
035: * Binding exception class. This is used for all types of errors that
036: * can be generated by the runtime.
037: *
038: * @author Dennis M. Sosnoski
039: * @version 1.0
040: */
041:
042: public class JiBXException extends Exception {
043: /** Exception that caused this exception. */
044: private Throwable m_rootCause;
045:
046: /**
047: * Constructor from message.
048: *
049: * @param msg message describing the exception condition
050: */
051: public JiBXException(String msg) {
052: super (msg);
053: }
054:
055: /**
056: * Constructor from message and wrapped exception.
057: *
058: * @param msg message describing the exception condition
059: * @param root exception which caused this exception
060: */
061: public JiBXException(String msg, Throwable root) {
062: super (msg);
063: m_rootCause = root;
064: }
065:
066: /**
067: * Get root cause exception.
068: *
069: * @return exception that caused this exception
070: */
071: public Throwable getRootCause() {
072: return m_rootCause;
073: }
074:
075: /**
076: * Print stack trace to standard error. This is an override of the base
077: * class method to implement exception chaining.
078: */
079: public void printStackTrace() {
080: printStackTrace(System.err);
081: }
082:
083: /**
084: * Print stack trace to stream. This is an override of the base class method
085: * to implement exception chaining.
086: *
087: * @param s stream for printing stack trace
088: */
089: public void printStackTrace(PrintStream s) {
090: if (m_rootCause == null) {
091: super .printStackTrace(s);
092: } else {
093: s.println(getMessage());
094: m_rootCause.printStackTrace(s);
095: s.println();
096: }
097: }
098:
099: /**
100: * Print stack trace to writer. This is an override of the base class method
101: * to implement exception chaining.
102: *
103: * @param s writer for printing stack trace
104: */
105: public void printStackTrace(PrintWriter s) {
106: if (m_rootCause == null) {
107: super.printStackTrace(s);
108: } else {
109: s.println(getMessage());
110: m_rootCause.printStackTrace(s);
111: s.println();
112: }
113: }
114: }
|