public synchronized Class defineClass()

in src/main/java/org/apache/bsf/util/event/generator/AdapterClassLoader.java [44:75]


    public synchronized Class defineClass(final String name, final byte[] b) {
        if ((c = getLoadedClass(name)) == null) {
            final String tmpName = name.replace('/', '.');

            try {
                c = defineClass(tmpName, b, 0, b.length); // rgf, 2006-02-03
            } catch (final NoClassDefFoundError e) // note "Error": Java thread would be killed otherwise!
            {
                // now try the Thread's current context class loader, but don't cache it
                final ClassLoader tccl = Thread.currentThread().getContextClassLoader();
                if (tccl != null) {
                    try {
                        final LocalThreadClassLoader ltcl = new LocalThreadClassLoader(tccl);
                        return ltcl.defineClass(tmpName, b);
                    } catch (final NoClassDefFoundError e1) // (NoClassDefFoundError e1)
                    {
                        logger.error("AdapterClassLoader: NoClassDefFoundError ERROR for class [" + tmpName + "]!");
                        throw e1; // rethrow error
                    }
                } else {
                    logger.error("AdapterClassLoader: NoClassDefFoundError ERROR for class [" + tmpName + "] (info: Thread context class loader is 'null'.)!");
                    throw e; // rethrow error
                }
            }

            put(name, c);
        } else {
            logger.error("AdapterClassLoader: " + c + " previously loaded. Can not redefine class.");
        }

        return c;
    }