diff --git a/projects/samskivert/src/java/com/samskivert/io/NestableIOException.java b/projects/samskivert/src/java/com/samskivert/io/NestableIOException.java new file mode 100644 index 00000000..45d46069 --- /dev/null +++ b/projects/samskivert/src/java/com/samskivert/io/NestableIOException.java @@ -0,0 +1,179 @@ +// +// $Id: NestableIOException.java,v 1.1 2001/11/08 01:17:41 mdb Exp $ +// +// samskivert library - useful routines for java programs +// Copyright (C) 2001 Michael Bayne +// +// This library is free software; you can redistribute it and/or modify it +// under the terms of the GNU Lesser General Public License as published +// by the Free Software Foundation; either version 2.1 of the License, or +// (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +package com.samskivert.io; + +import java.io.PrintStream; +import java.io.PrintWriter; +import java.io.IOException; + +import org.apache.commons.util.exception.Nestable; +import org.apache.commons.util.exception.NestableDelegate; + +/** + * A base class for IO exceptions that can contain other exceptions. + * + * @see org.apache.commons.util.exception.NestableException + */ +public class NestableIOException + extends IOException + implements Nestable +{ + /** + * Constructs a new NestableIOException without specified + * detail message. + */ + public NestableIOException () + { + } + + /** + * Constructs a new NestableIOException with specified + * detail message. + * + * @param msg the error message. + */ + public NestableIOException (String msg) + { + super(msg); + } + + /** + * Constructs a new NestableIOException with specified + * nested Throwable. + * + * @param cause the exception or error that caused this exception to + * be thrown. + */ + public NestableIOException (Throwable cause) + { + super(); + _cause = cause; + } + + /** + * Constructs a new NestableIOException with specified + * detail message and nested Throwable. + * + * @param msg the error message. + * @param cause the exception or error that caused this exception to + * be thrown. + */ + public NestableIOException (String msg, Throwable cause) + { + super(msg); + _cause = cause; + } + + /** + * Returns the nested exception. + * + * @see Nestable#getCause + */ + public Throwable getCause () + { + return _cause; + } + + /** + * Concatenates this exception's message with that of the nested + * exception and returns it. + * + * @see Nestable#getMessage + */ + public String getMessage () + { + StringBuffer msg = new StringBuffer(); + String ourMsg = super.getMessage(); + + // add our message (if there is one) + if (ourMsg != null) { + msg.append(ourMsg); + } + + // add our cause's message (if there is one) + if (_cause != null) { + String causeMsg = _cause.getMessage(); + if (causeMsg != null) { + if (ourMsg != null) { + msg.append(": "); + } + msg.append(causeMsg); + } + } + + return (msg.length() > 0 ? msg.toString() : null); + } + + /** + * Prints the stack trace of this exception (and the nested exception) + * the the standard error stream. + * + * @see Nestable#printStackTrace() + */ + public void printStackTrace () + { + _delegate.printStackTrace(); + } + + /** + * Prints the stack trace of this exception (and the nested exception) + * to the specified print stream. + * + * @param out PrintStream to use for output. + * + * @see Nestable#printStackTrace(PrintStream) + */ + public void printStackTrace (PrintStream out) + { + _delegate.printStackTrace(out); + } + + /** + * Prints the stack trace of this exception (and the nested exception) + * to the specified print writer. + * + * @param out PrintWriter to use for output. + * + * @see Nestable#printStackTrace(PrintWriter) + */ + public void printStackTrace (PrintWriter out) + { + _delegate.printStackTrace(out); + } + + /** + * Prints the stack trace only of the enclosing exception. + * + * @see Nestable#printPartialStackTrace(PrintWriter) + */ + public final void printPartialStackTrace (PrintWriter out) + { + super.printStackTrace(out); + } + + /** The helper instance which contains much of the code to which we + * delegate. */ + protected NestableDelegate _delegate = new NestableDelegate(this); + + /** Holds the reference to the exception or error that caused this + * exception to be thrown. */ + protected Throwable _cause = null; +} diff --git a/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java b/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java index e6130be5..0b2937d6 100644 --- a/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java +++ b/projects/samskivert/src/java/com/samskivert/xml/SimpleParser.java @@ -1,5 +1,5 @@ // -// $Id: SimpleParser.java,v 1.1 2001/10/15 23:46:02 shaper Exp $ +// $Id: SimpleParser.java,v 1.2 2001/11/08 01:17:41 mdb Exp $ package com.samskivert.xml; @@ -10,6 +10,7 @@ import org.xml.sax.*; import org.xml.sax.helpers.DefaultHandler; import com.samskivert.Log; +import com.samskivert.io.NestableIOException; /** * The simple parser class provides an extensible object that is @@ -39,7 +40,8 @@ public class SimpleParser extends DefaultHandler * @exception IOException thrown if an error occurs while parsing * the file. */ - public void parseFile (String fname) throws IOException + public void parseFile (String fname) + throws IOException { _fname = fname; @@ -51,10 +53,10 @@ public class SimpleParser extends DefaultHandler XMLUtil.parse(this, is); } catch (ParserConfigurationException pce) { - throw new IOException(pce.toString()); + throw new NestableIOException(pce); } catch (SAXException saxe) { - throw new IOException(saxe.toString()); + throw new NestableIOException(saxe); } }