docs: private <T extends Throwable> T ignoreWarnOrFail(Throwable throwable, final Class<T> exceptionClassToRaise, String msgKey, Object... objs) {
  
          // Read the value each time in order to allow for changes to the onError setting
          switch ((OnError) properties.get(OnErrorUtil.CFG_KEY_ON_ERROR)) {
              case IGNORE:
                  if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled())
                      Tr.debug(this, tc, "ignoring error: " + msgKey, objs);
                  return null;
              case WARN:
                  Tr.warning(tc, msgKey, objs);
                  return null;
              case FAIL:
                  try {
                      if (throwable != null && exceptionClassToRaise.isInstance(throwable))
                          return exceptionClassToRaise.cast(throwable);
  
                      Constructor<T> con = AccessController.doPrivileged(new PrivilegedExceptionAction<Constructor<T>>() {
                          @Override
                          public Constructor<T> run() throws NoSuchMethodException {
                              return exceptionClassToRaise.getConstructor(String.class);
                          }
                      });
                      String message = msgKey == null ? throwable.getMessage() : Tr.formatMessage(tc, msgKey, objs);
                      T failure = con.newInstance(message);
                      failure.initCause(throwable);
                      return failure;
                  } catch (PrivilegedActionException e) {
                      throw new RuntimeException(e.getCause());
                  } catch (RuntimeException e) {
                      throw e;
                  } catch (Exception e) {
                      throw new RuntimeException(e);
                  }
          }
  
          return null;
      }