All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.logicalcobwebs.proxool.ProxoolException Maven / Gradle / Ivy

The newest version!
/*
 * This software is released under a licence similar to the Apache Software Licence.
 * See org.logicalcobwebs.proxool.package.html for details.
 * The latest version is available at http://proxool.sourceforge.net
 */
package org.logicalcobwebs.proxool;

import java.io.PrintStream;
import java.io.PrintWriter;

/**
  * Proxool exception class that emulates the behaviour of the new cause
  * facility in jdk 1.4.  It is also known as the chained
  * exception facility, as the cause can, itself, have a cause, and so on,
  * leading to a "chain" of exceptions, each caused by another.
  *
  * 

A cause can be associated with a throwable in two ways: via a * constructor that takes the cause as an argument, or via the * {@link #initCause(Throwable)} method. New throwable classes that * wish to allow causes to be associated with them should provide constructors * that take a cause and delegate (perhaps indirectly) to one of the * Throwable constructors that takes a cause. * * @version $Revision: 1.2 $, $Date: 2003/03/03 11:11:58 $ * @author Christian Nedregaard ([email protected]) * @author $Author: billhorsman $ (current maintainer) * @since Proxool 0.6 */ public class ProxoolException extends Exception { /** * The throwable that caused this ProxoolException to get thrown, or null if this * ProxoolException was not caused by another throwable, or if the causative * throwable is unknown. */ private Throwable cause = this; /** * Constructs a new instance with null as its detail message. * The cause is not initialized, and may subsequently be initialized by a * call to {@link #initCause}. */ public ProxoolException() { super(); } /** * Constructs a new instance with the specified detail message. The * cause is not initialized, and may subsequently be initialized by * a call to {@link #initCause}. * * @param message the detail message. The detail message is saved for * later retrieval by the {@link #getMessage()} method. */ public ProxoolException(String message) { super(message); } /** * Constructs a new instance with the specified detail message and cause. * *

Note that the detail message associated with * cause is not automatically incorporated in * this throwable's detail message. * * @param message the detail message (which is saved for later retrieval * by the {@link #getMessage()} method). * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ public ProxoolException(String message, Throwable cause) { this(message); this.cause = cause; } /** * Constructs a new throwable with the specified cause and a detail * message of (cause==null ? null : cause.toString()) (which * typically contains the class and detail message of cause). * This constructor is useful for throwables that are little more than * wrappers for other throwables. * * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) */ public ProxoolException(Throwable cause) { this(cause == null ? null : cause.toString()); this.cause = cause; } /** * Returns the cause of this exception or null if the * cause is nonexistent or unknown. (The cause is the throwable that * caused this exception to get thrown.) * *

This implementation returns the cause that was supplied via one of * the constructors requiring a Throwable, or that was set after * creation with the {@link #initCause(Throwable)} method. * * @return the cause of this throwable or null if the * cause is nonexistent or unknown. */ public Throwable getCause() { return (cause == this ? null : cause); } /** * Initializes the cause of this exception to the specified value. * (The cause is the throwable that caused this exception to get thrown.) * *

This method can be called at most once. It is generally called from * within the constructor, or immediately after creating the * throwable. If this throwable was created * with {@link #ProxoolException(Throwable)} or * {@link #ProxoolException(String,Throwable)}, this method cannot be called * even once. * * @param cause the cause (which is saved for later retrieval by the * {@link #getCause()} method). (A null value is * permitted, and indicates that the cause is nonexistent or * unknown.) * @return a reference to this ProxoolException instance. */ public synchronized Throwable initCause(Throwable cause) { if (this.cause != this) { throw new IllegalStateException("Can't overwrite cause"); } if (cause == this) { throw new IllegalArgumentException("Self-causation not permitted"); } this.cause = cause; return this; } /** * Prints this ProxoolException and its backtrace to the * standard error stream. * * The backtrace for a ProxoolException with an initialized, non-null cause * should generally include the backtrace for the cause. */ public void printStackTrace() { printStackTrace(System.err); } /** * Prints this ProxoolException and its backtrace to the specified print stream. * * @param stream PrintStream to use for output */ public void printStackTrace(PrintStream stream) { synchronized (stream) { super.printStackTrace(stream); Throwable ourCause = getCause(); if (ourCause != null) { stream.println(); stream.println("Caused by:"); ourCause.printStackTrace(stream); } } } /** * Prints this ProxoolException and its backtrace to the specified * print writer. * * @param writer PrintWriter to use for output */ public void printStackTrace(PrintWriter writer) { synchronized (writer) { super.printStackTrace(writer); Throwable ourCause = getCause(); if (ourCause != null) { writer.println(); writer.println("Caused by:"); ourCause.printStackTrace(writer); } } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy