private Collection<Class<AuthenticationProvider>> getAuthenticationProviderClasses(Collection<String> names)
            throws GuacamoleException {

        // If no classnames are provided, just return an empty list
        if (names == null)
            return Collections.<Class<AuthenticationProvider>>emptyList();

        // Define all auth provider classes
        Collection<Class<AuthenticationProvider>> classes = new ArrayList<Class<AuthenticationProvider>>(names.size());
        for (String name : names)
            classes.add(getAuthenticationProviderClass(name));

        // Callers should not rely on modifying the result
        return Collections.unmodifiableCollection(classes);

    }
Returns a new collection of all AuthenticationProvider subclasses having
the given names. If any class does not exist or isn't actually a
subclass of AuthenticationProvider, an exception will be thrown, and
no further AuthenticationProvider classes will be loaded.

@param names
    The names of the AuthenticationProvider classes to retrieve.

@return
    A new collection of all AuthenticationProvider subclasses having the
    given names.

@throws GuacamoleException
    If any given class does not exist, or if any given class is not a
    subclass of AuthenticationProvider.
guacamole/src/main/java/org/apache/guacamole/extension/Extension.java