code: static Class lookUpFactoryClass(String factoryId,
                                             String propertiesFilename,
                                             String fallbackClassName)
          throws ConfigurationError
      {
          String factoryClassName = lookUpFactoryClassName(factoryId,
                                                           propertiesFilename,
                                                           fallbackClassName);
          ClassLoader cl = findClassLoader();
  
          if (factoryClassName == null) {
              factoryClassName = fallbackClassName;
          }
  
          // assert(className != null);
          try{
              Class providerClass = findProviderClass(factoryClassName,
                                                      cl,
                                                      true);
              debugPrintln("created new instance of " + providerClass +
                     " using ClassLoader: " + cl);
              return providerClass;
          } catch (ClassNotFoundException x) {
              throw new ConfigurationError(
                  "Provider " + factoryClassName + " not found", x);
          } catch (Exception x) {
              throw new ConfigurationError(
                  "Provider "+factoryClassName+" could not be instantiated: "+x,
                  x);
          }
      }
docs: Finds the implementation Class object in the specified order.  The
  specified order is the following:
  <ol>
  <li>query the system property using <code>System.getProperty</code>
  <li>read <code>$java.home/lib/<i>propertiesFilename</i></code> file
  <li>read <code>META-INF/services/<i>factoryId</i></code> file
  <li>use fallback classname
  </ol>
  
  @return Class object that provides factory service, never null
  
  @param factoryId             Name of the factory to find, same as
  a property name
  @param propertiesFilename The filename in the $java.home/lib directory
  of the properties file.  If none specified,
  ${java.home}/lib/xalan.properties will be used.
  @param fallbackClassName     Implementation class name, if nothing else
  is found.  Use null to mean no fallback.
  
  @exception ObjectFactory.ConfigurationError