code: public static SchemaFactory newInstance(String schemaLanguage, String factoryClassName,
              ClassLoader classLoader) {
          if (schemaLanguage == null) {
              throw new NullPointerException("schemaLanguage == null");
          } else if (factoryClassName == null) {
              throw new NullPointerException("factoryClassName == null");
          }
          if (classLoader == null) {
              classLoader = Thread.currentThread().getContextClassLoader();
          }
          try {
              Class<?> type = classLoader != null
                      ? classLoader.loadClass(factoryClassName)
                      : Class.forName(factoryClassName);
              SchemaFactory result = (SchemaFactory) type.newInstance();
              if (result == null || !result.isSchemaLanguageSupported(schemaLanguage)) {
                  throw new IllegalArgumentException(schemaLanguage);
              }
              return result;
          } catch (ClassNotFoundException e) {
              throw new IllegalArgumentException(e);
          } catch (InstantiationException e) {
              throw new IllegalArgumentException(e);
          } catch (IllegalAccessException e) {
              throw new IllegalArgumentException(e);
          }
      }
docs: Returns an instance of the named implementation of {@code SchemaFactory}.
  
  @throws IllegalArgumentException if {@code factoryClassName} is not available, cannot be
  instantiated, or doesn't support {@code schemaLanguage}.
  @since 1.6