001 // SAX exception class.
002 // http://www.saxproject.org
003 // No warranty; no copyright -- use this as you will.
004 // $Id: SAXException.java,v 1.1 2004/12/23 22:38:42 mark Exp $
005
006 package org.xml.sax;
007
008 /**
009 * Encapsulate a general SAX error or warning.
010 *
011 * <blockquote>
012 * <em>This module, both source code and documentation, is in the
013 * Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
014 * See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
015 * for further information.
016 * </blockquote>
017 *
018 * <p>This class can contain basic error or warning information from
019 * either the XML parser or the application: a parser writer or
020 * application writer can subclass it to provide additional
021 * functionality. SAX handlers may throw this exception or
022 * any exception subclassed from it.</p>
023 *
024 * <p>If the application needs to pass through other types of
025 * exceptions, it must wrap those exceptions in a SAXException
026 * or an exception derived from a SAXException.</p>
027 *
028 * <p>If the parser or application needs to include information about a
029 * specific location in an XML document, it should use the
030 * {@link org.xml.sax.SAXParseException SAXParseException} subclass.</p>
031 *
032 * @since SAX 1.0
033 * @author David Megginson
034 * @version 2.0.1 (sax2r2)
035 * @see org.xml.sax.SAXParseException
036 */
037 public class SAXException extends Exception {
038
039
040 /**
041 * Create a new SAXException.
042 */
043 public SAXException ()
044 {
045 super();
046 this.exception = null;
047 }
048
049
050 /**
051 * Create a new SAXException.
052 *
053 * @param message The error or warning message.
054 */
055 public SAXException (String message) {
056 super(message);
057 this.exception = null;
058 }
059
060
061 /**
062 * Create a new SAXException wrapping an existing exception.
063 *
064 * <p>The existing exception will be embedded in the new
065 * one, and its message will become the default message for
066 * the SAXException.</p>
067 *
068 * @param e The exception to be wrapped in a SAXException.
069 */
070 public SAXException (Exception e)
071 {
072 super();
073 this.exception = e;
074 }
075
076
077 /**
078 * Create a new SAXException from an existing exception.
079 *
080 * <p>The existing exception will be embedded in the new
081 * one, but the new exception will have its own message.</p>
082 *
083 * @param message The detail message.
084 * @param e The exception to be wrapped in a SAXException.
085 */
086 public SAXException (String message, Exception e)
087 {
088 super(message);
089 this.exception = e;
090 }
091
092
093 /**
094 * Return a detail message for this exception.
095 *
096 * <p>If there is an embedded exception, and if the SAXException
097 * has no detail message of its own, this method will return
098 * the detail message from the embedded exception.</p>
099 *
100 * @return The error or warning message.
101 */
102 public String getMessage ()
103 {
104 String message = super.getMessage();
105
106 if (message == null && exception != null) {
107 return exception.getMessage();
108 } else {
109 return message;
110 }
111 }
112
113
114 /**
115 * Return the embedded exception, if any.
116 *
117 * @return The embedded exception, or null if there is none.
118 */
119 public Exception getException ()
120 {
121 return exception;
122 }
123
124
125 /**
126 * Override toString to pick up any embedded exception.
127 *
128 * @return A string representation of this exception.
129 */
130 public String toString ()
131 {
132 if (exception != null) {
133 return exception.toString();
134 } else {
135 return super.toString();
136 }
137 }
138
139
140
141 //////////////////////////////////////////////////////////////////////
142 // Internal state.
143 //////////////////////////////////////////////////////////////////////
144
145
146 /**
147 * @serial The embedded exception if tunnelling, or null.
148 */
149 private Exception exception;
150
151 }
152
153 // end of SAXException.java