public synchronized Class defineClass()

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


  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;
  }