code: public <T> List<T> load( String serviceType )
      {
          List<T> services = new ArrayList<T>();
          String resourceName = "/META-INF/services/" + serviceType;
          try
          {
              Enumeration<URL> resources = classLoader.getResources( resourceName );
              while( resources.hasMoreElements() )
              {
                  URL url = resources.nextElement();
                  List<String> classNames = parse( url );
                  for( String className : classNames )
                  {
                      Class<T> klass = loadClassIfVisible( className, classLoader );
                      if( klass != null )
                      {
                          T service = klass.newInstance();
                          services.add( service );
                      }
                  }
              }
          }
          catch ( IOException exc )
          {
              throw new NoServiceProviderException( exc );
          }
          catch ( InstantiationException exc )
          {
              throw new NoServiceProviderException( exc );
          }
          catch ( IllegalAccessException exc )
          {
              throw new NoServiceProviderException( exc );
          }
          return services;
      }
docs: Returns a list of service instances for the given a service type, finding all
  META-INF/services resources for the given type and loading and instantiating all classes
  listed in these resources.
  <p>
  A class that cannot be loaded by the class loader passed to the constructor of this class is
  silently ignored.
  
  @param serviceType fully qualified service class name
  @return list of services matching the given service type
  @throws NoServiceProviderException if a resource cannot be read or if a loaded class cannot
  be instantiated