You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ps...@apache.org on 2004/07/11 00:21:36 UTC
cvs commit: jakarta-commons/math/src/java/org/apache/commons/math MathException.java
psteitz 2004/07/10 15:21:36
Modified: math/src/java/org/apache/commons/math MathException.java
Log:
Eliminated [lang] dependency.
Revision Changes Path
1.18 +110 -24 jakarta-commons/math/src/java/org/apache/commons/math/MathException.java
Index: MathException.java
===================================================================
RCS file: /home/cvs/jakarta-commons/math/src/java/org/apache/commons/math/MathException.java,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -r1.17 -r1.18
--- MathException.java 23 Jun 2004 16:26:16 -0000 1.17
+++ MathException.java 10 Jul 2004 22:21:36 -0000 1.18
@@ -16,47 +16,133 @@
package org.apache.commons.math;
import java.io.Serializable;
+import java.io.PrintStream;
+import java.io.PrintWriter;
-import org.apache.commons.lang.exception.NestableException;
/**
- * A generic exception indicating problems in the math package.
- * @version $Revision$ $Date$
- */
-public class MathException extends NestableException implements Serializable {
-
+* Base exception class for commons-math.
+* <p>
+* Supports nesting, emulating JDK 1.4 behavior if necessary.
+* <p>
+* Adapted from {@link org.apache.commons.collections.FunctorException}.
+*
+* @version $Revision$ $Date$
+*/
+public class MathException extends Exception {
+
/** Serializable version identifier */
static final long serialVersionUID = -8594613561393443827L;
/**
- * Constructs a MathException
+ * Does JDK support nested exceptions?
+ */
+ private static final boolean JDK_SUPPORTS_NESTED;
+
+ static {
+ boolean flag = false;
+ try {
+ Throwable.class.getDeclaredMethod("getCause", new Class[0]);
+ flag = true;
+ } catch (NoSuchMethodException ex) {
+ flag = false;
+ }
+ JDK_SUPPORTS_NESTED = flag;
+ }
+
+ /**
+ * Root cause of the exception
+ */
+ private final Throwable rootCause;
+
+ /**
+ * Constructs a new <code>MathException</code> with no
+ * detail message.
*/
public MathException() {
- this(null, null);
+ super();
+ this.rootCause = null;
}
-
+
/**
- * Create an exception with a given error message.
- * @param message message describing the problem
+ * Constructs a new <code>MathException</code> with specified
+ * detail message.
+ *
+ * @param msg the error message.
*/
- public MathException(final String message) {
- this(message, null);
+ public MathException(String msg) {
+ super(msg);
+ this.rootCause = null;
}
-
+
/**
- * Create an exception with a given error message and root cause.
- * @param message message describing the problem
- * @param throwable caught exception causing this problem
+ * Constructs a new <code>MathException</code> with specified
+ * nested <code>Throwable</code> root cause.
+ *
+ * @param rootCause the exception or error that caused this exception
+ * to be thrown.
*/
- public MathException(final String message, final Throwable throwable) {
- super(message, throwable);
+ public MathException(Throwable rootCause) {
+ super((rootCause == null ? null : rootCause.getMessage()));
+ this.rootCause = rootCause;
}
-
+
/**
- * Create an exception with a given root cause.
- * @param throwable caught exception causing this problem
+ * Constructs a new <code>MathException</code> with specified
+ * detail message and nested <code>Throwable</code> root cause.
+ *
+ * @param msg the error message.
+ * @param rootCause the exception or error that caused this exception
+ * to be thrown.
*/
- public MathException(final Throwable throwable) {
- this(null, throwable);
+ public MathException(String msg, Throwable rootCause) {
+ super(msg);
+ this.rootCause = rootCause;
}
+
+ /**
+ * Gets the cause of this throwable.
+ *
+ * @return the cause of this throwable, or <code>null</code>
+ */
+ public Throwable getCause() {
+ return rootCause;
+ }
+
+ /**
+ * Prints the stack trace of this exception to the standard error stream.
+ */
+ public void printStackTrace() {
+ printStackTrace(System.err);
+ }
+
+ /**
+ * Prints the stack trace of this exception to the specified stream.
+ *
+ * @param out the <code>PrintStream</code> to use for output
+ */
+ public void printStackTrace(PrintStream out) {
+ synchronized (out) {
+ PrintWriter pw = new PrintWriter(out, false);
+ printStackTrace(pw);
+ // Flush the PrintWriter before it's GC'ed.
+ pw.flush();
+ }
+ }
+
+ /**
+ * Prints the stack trace of this exception to the specified writer.
+ *
+ * @param out the <code>PrintWriter</code> to use for output
+ */
+ public void printStackTrace(PrintWriter out) {
+ synchronized (out) {
+ super.printStackTrace(out);
+ if (rootCause != null && JDK_SUPPORTS_NESTED == false) {
+ out.print("Caused by: ");
+ rootCause.printStackTrace(out);
+ }
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org