@Override
    protected Class findClass(String name)
            throws ClassNotFoundException {
        String fileName = name.replace('.', '/') + ".class";
        Iterator it = cpElements.iterator();
        String next = null;
        byte[] classData = null;

        while (it.hasNext() == true && classData == null) {
            next = (String) it.next();
            if (isJarOrZip(next) == true) {
                classData = loadClassFromJarOrZip(next, fileName);
            } else {
                classData = loadClassFromPath(next, fileName);
            }
        }

        if (classData == null) {
            throw new ClassNotFoundException(name);
        }

        return this.defineClass(name, classData, 0, classData.length);
    }