⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exceptionhelper.java

📁 Quartz is a full-featured, open source job scheduling system that can be integrated with, or used al
💻 JAVA
字号:
/*  * Copyright 2004-2006 OpenSymphony  *  * 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. */package org.quartz.utils;import java.lang.reflect.Method;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;/** * <p> * Helper class for handling exception nesting, which is only supported in JDKs * which are version 1.4 or later.  * </p> *  * Sample usage: * <pre> * try { *     // Validate arguments * } catch (Exception e) { *     Exception myException = new IllegalArgumentException("Doh!"); *     ExceptionHelper.setCause(myException, e); *     throw myException; * } * </pre> */public class ExceptionHelper {    private static Boolean supportsNestedThrowable = null;        private ExceptionHelper() {    }        /**     * Set the given <code>Throwable<code>'s cause if this JDK supports     * the <code>Throwable#initCause(Throwable)</code> method.      */    public static Throwable setCause(Throwable exception, Throwable cause) {        if (exception != null) {            if (supportsNestedThrowable()) {                try {                    Method initCauseMethod =                         exception.getClass().getMethod("initCause", new Class[] {Throwable.class});                    initCauseMethod.invoke(exception, new Object[] {cause});                } catch (Exception e) {                    getLog().warn(                        "Unable to invoke initCause() method on class: " +                         exception.getClass().getName(), e);                }            }        }                return exception;    }        /**     * Get the underlying cause <code>Throwable</code> of the given exception     * if this JDK supports the <code>Throwable#getCause()</code> method.      */    public static Throwable getCause(Throwable exception) {        if (supportsNestedThrowable()) {            try {                Method getCauseMethod =                     exception.getClass().getMethod("getCause", (Class[])null);                return (Throwable)getCauseMethod.invoke(exception, (Object[])null);            } catch (Exception e) {                getLog().warn(                    "Unable to invoke getCause() method on class: " +                     exception.getClass().getName(), e);            }        }                return null;    }        /**     * Get whether the Throwable hierarchy for this JDK supports      * initCause()/getCause().      */    public static synchronized boolean supportsNestedThrowable() {        if (supportsNestedThrowable == null) {            try {                Throwable.class.getMethod("initCause", new Class[] {Throwable.class});                Throwable.class.getMethod("getCause", (Class[])null);                supportsNestedThrowable = Boolean.TRUE;                getLog().debug("Detected JDK support for nested exceptions.");            } catch (NoSuchMethodException e) {                supportsNestedThrowable = Boolean.FALSE;                getLog().debug("Nested exceptions are not supported by this JDK.");            }        }                return supportsNestedThrowable.booleanValue();    }        private static Log getLog() {        return LogFactory.getLog(ExceptionHelper.class);    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -