code: @SuppressWarnings("unchecked")
  	public static boolean isCausedBy(@Nullable Throwable throwable,
  			Class<? extends Exception>... causeExceptionClasses) {
  		Throwable cause = throwable;
  
  		while (cause != null) {
  			for (Class<? extends Exception> causeClass : causeExceptionClasses) {
  				if (causeClass.isInstance(cause)) {
  					return true;
  				}
  			}
  			cause = cause.getCause();
  		}
  		return false;
  	}
docs: 判断异常是否由某些底层的异常引起.