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