code: private static boolean canWrapChain( ClassLoader loader ) {
      if( loader == null ) {
        return false;
      }
      UrlClassLoaderWrapper wrapped = UrlClassLoaderWrapper.wrap( loader );
      boolean bSysLoader = loader == ClassLoader.getSystemClassLoader();
      if( bSysLoader ) {
        return wrapped != null;
      }
      loader = loader.getParent();
      return wrapped != null && canWrapChain( loader );
    }
docs: /*
  We don't currently wrap the chain of loaders for WebSphere or WebLogic or JBoss
  because they use "module" class loaders that are not URLClassLoader-like.  We
  can maybe someday handle them seperately.
  
  IBM class loader chain:
  ~~~~~~~~~~~~~~~~~~~~~~~
  com.guidewire.pl.system.gosu.GosuPluginContainer ->
  com.guidewire.pl.system.integration.plugins.PluginContainer ->
  com.guidewire.pl.system.integration.plugins.SharedPluginContainer ->
  com.guidewire.pl.system.integration.plugins.PluginContainer ->
  
  [weblogic.utils.classloaders.ChangeAwareClassLoader ->
  weblogic.utils.classloaders.FilteringClassLoader ->
  weblogic.utils.classloaders.GenericClassLoader]* ->
  
  sun.misc.Launcher$AppClassLoader ->
  sun.misc.Launcher$ExtClassLoader ->
  <null>
  
  WebLogic class loader chain:
  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  com.guidewire.pl.system.gosu.GosuPluginContainer ->
  com.guidewire.pl.system.integration.plugins.PluginContainer ->
  com.guidewire.pl.system.integration.plugins.SharedPluginContainer ->
  com.guidewire.pl.system.integration.plugins.PluginContainer ->
  
  org.jboss.modules.ModuleClassLoader ->
  
  sun.misc.Launcher$AppClassLoader ->
  sun.misc.Launcher$ExtClassLoader ->
  <null>