code: public static <T> Class<T> forName(String className) throws NoSuchBeingException, ClassCastException, NullPointerException
    {
      if(className == null) {
        throw new NullPointerException("Null class name.");
      }
      Class<T> clazz = forOptionalName(className);
      if(clazz == null) {
        throw new NoSuchBeingException("Class not found: " + className);
      }
      return clazz;
    }
docs: Load named class using current thread context class loader. Uses current thread context class loader to locate and
  load requested class. If current thread context class loader is null or fails to find requested class try with this
  utility class class loader.
  <p>
  This logic is designed for Tomcat class loading algorithm. Libraries are loaded using a separated class loader and
  every application has its own class loader. This method algorithm allows for a class used by an application to be
  found either by current thread or by library class loader.
  <p>
  Considering above, note that there is a subtle difference compared with standard {@link Class#forName(String)}
  counterpart: this method uses <code>current thread context loader</code> whereas Java standard uses
  <code>current loader</code>. Maybe not obvious, this 'semantic' difference could lead to class not found on Java
  standard while this utility method find the class. For example, a class defined by an web application could not be
  found by Java <code>Class.forName</code> method running inside a class defined by library.
  
  @param className qualified class name, not null.
  @param <T> class to auto-cast named class.
  @return class identified by name.
  @throws NoSuchBeingException if class not found.
  @throws ClassCastException if found class cannot cast to requested auto-cast type.
  @throws NullPointerException if <code>className</code> argument is null.