private static Class loadClass0()

in yoko-rmi-spec/src/main/java/org/apache/yoko/rmispec/util/UtilLoader.java [67:187]


    private static Class<?> loadClass0(String name, String codebase, ClassLoader loader) 
            throws ClassNotFoundException {
        Class result = null;

        ClassLoader stackLoader = null;
        ClassLoader thisLoader = UtilLoader.class.getClassLoader(); 
        Class[] stack = _secman.getClassContext();
        for (int i = 1; i < stack.length; i++) {
            ClassLoader testLoader = stack[i].getClassLoader();
            if (testLoader != null && testLoader != thisLoader)
            {
                stackLoader = thisLoader; 
                break; 
            }
        }

        if (stackLoader != null) {
            try {
                logger.finer("trying stack loader");
                result = stackLoader.loadClass(name);
            } catch (ClassNotFoundException ex) {
                // skip //
            }

            if (result != null) {
                return result;
            }
        }

        // try loading using our loader, just in case we really were loaded
        // using the same classloader the delegate is in.
        if (thisLoader != null) {
            try {
                logger.finer("trying UtilLoader loader");
                result = thisLoader.loadClass(name);
            } catch (ClassNotFoundException ex) {
                // skip //
            }

            if (result != null) {
                return result;
            }
        }

        if (codebase != null && !"".equals(codebase)
                && !Boolean.getBoolean("java.rmi.server.useCodeBaseOnly")) {
            try {
                logger.finer("trying RMIClassLoader");

                URLClassLoader url_loader = new URLClassLoader(
                        new URL[]{new URL(codebase)}, loader);

                result = url_loader.loadClass(name);

                // log.info("SUCESSFUL class download "+name+" from "+codebase,
                // new Throwable("TRACE"));

            } catch (ClassNotFoundException ex) {
                logger.log(Level.FINER, "RMIClassLoader says " + ex.getMessage(), ex);

                // log.info("FAILED class download "+name+" from "+codebase,
                // ex);

                // skip //
            } catch (MalformedURLException ex) {
                logger.log(Level.FINER, "RMIClassLoader says " + ex.getMessage(), ex);

                logger.finer("FAILED class download " + name + " from "
                        + codebase + " " + ex.getMessage());

                // skip //
            } catch (RuntimeException ex) {

                logger.log(Level.FINER, "FAILED class download " + name + " from "
                        + codebase + " " + ex.getMessage(), ex);

            }

            if (result != null) {
                return result;
            }

        } else {

            codebase = (String) AccessController.doPrivileged(new GetSystemPropertyAction("java.rmi.server.codebase"));

            if (codebase != null) {
                try {
                    result = java.rmi.server.RMIClassLoader.loadClass(codebase,
                            name);
                } catch (ClassNotFoundException ex) {
                    // skip //
                } catch (MalformedURLException ex) {
                    // skip //
                }

                if (result != null) {
                    return result;
                }
            }
        }

        if (loader == null) {
            loader = getContextClassLoader();
        }

        if (loader != null) { 
            try {
                logger.finer("trying local loader");
                result = loader.loadClass(name);
            } catch (ClassNotFoundException ex) {
                logger.log(Level.FINER, "LocalLoader says " + ex.getMessage(), ex);
            }
        }

        if (result != null) {
            return result;
        }

        throw new ClassNotFoundException(name);
    }