/*
* Copyright 2007 Ralf Joachim
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* $Id: Configuration.java 6907 2007-03-28 21:24:52Z rjoachim $
*/
package org.castor.core.exceptions;
import java.io.PrintStream;
import java.io.PrintWriter;
/**
* CastorRuntimeException is the superclass of all unchecked Castor exceptions that are thrown
* during the normal operation of the Java Virtual Machine.
*
* @version $Id: Configuration.java,v 1.8 2006/03/08 17:25:52 jens Exp $
* @author <a href="mailto:ralf DOT joachim AT syscon DOT eu">Ralf Joachim</a>
* @since 1.1.3
*/
public class CastorRuntimeException extends RuntimeException {
/** SerialVersionUID */
private static final long serialVersionUID = 3984585622253325513L;
/** The cause of this exception or <code>null</code> if the cause is nonexistent or unknown. */
private Throwable _cause = null;
/** Has the cause of this exception been initialized? */
private boolean _initCause = false;
/**
* Constructs a new Castor runtime exception without a message. The cause is not initialized
* but may subsequently be initialized by a call to initCause(Throwable).
*/
public CastorRuntimeException() {
super();
}
/**
* Constructs a new Castor runtime exception with the specified detail message. The cause is
* not initialized but may subsequently be initialized by a call to initCause(Throwable).
*
* @param message The detail message.
*/
public CastorRuntimeException(final String message) {
super(message);
}
/**
* Constructs a new Castor runtime exception with the specified cause and the detail message
* of the cause. This constructor is useful for exceptions that are wrappers for others.
*
* @param cause The cause.
*/
public CastorRuntimeException(final Throwable cause) {
super((cause == null) ? null : cause.getMessage());
_cause = cause;
_initCause = true;
}
/**
* Constructs a new Castor runtime exception with the specified detail message and cause.
*
* @param message The detail message.
* @param cause The cause.
*/
public CastorRuntimeException(final String message, final Throwable cause) {
super(message);
_cause = cause;
_initCause = true;
}
/**
* The method emulates the JDK 1.4 Throwable version of initCause() for JDKs before 1.4.
* <br/>
* {@inheritDoc}
*/
public final Throwable initCause(final Throwable cause) {
if (cause == this) { throw new IllegalArgumentException(); }
if (_initCause) { throw new IllegalStateException(); }
_cause = cause;
_initCause = true;
return this;
}
/**
* The method emulates the JDK 1.4 Throwable version of getCause() for JDKs before 1.4.
* <br/>
* {@inheritDoc}
*/
public final Throwable getCause() {
return _cause;
}
/**
* {@inheritDoc}
*/
public void printStackTrace() {
// Print the stack trace for this exception.
super.printStackTrace();
if (_cause != null) {
System.err.print("Caused by: ");
_cause.printStackTrace();
}
}
/**
* {@inheritDoc}
*/
public final void printStackTrace(final PrintStream s) {
// Print the stack trace for this exception.
super.printStackTrace(s);
if (_cause != null) {
s.print("Caused by: ");
_cause.printStackTrace(s);
}
}
/**
* {@inheritDoc}
*/
public final void printStackTrace(final PrintWriter w) {
// Print the stack trace for this exception.
super.printStackTrace(w);
if (_cause != null) {
w.print("Caused by: ");
_cause.printStackTrace(w);
}
}
}