@Override
  public IOException unwrapRemoteException() {
    Class<?> realClass;
    try {
      // try to load a exception class from where the HBase classes are loaded or from Dynamic
      // classloader.
      realClass = Class.forName(getClassName(), false, ClassLoaderHolder.CLASS_LOADER);
    } catch (ClassNotFoundException cnfe) {
      try {
        // cause could be a hadoop exception, try to load from hadoop classpath
        realClass = Class.forName(getClassName(), false, super.getClass().getClassLoader());
      } catch (ClassNotFoundException e) {
        return new DoNotRetryIOException(
          "Unable to load exception received from server:" + e.getMessage(), this);
      }
    }
    try {
      return instantiateException(realClass.asSubclass(IOException.class));
    } catch (Exception e) {
      return new DoNotRetryIOException(
        "Unable to instantiate exception received from server:" + e.getMessage(), this);
    }
  }
Dynamic class loader to load filter/comparators
hbase-client/src/main/java/org/apache/hadoop/hbase/ipc/RemoteWithExtrasException.java