src/main/java/org/jboss/util/Classes.java
public static URL[] getClassLoaderURLs(ClassLoader cl)
   {
      URL[] urls = {};
      try
      {
         Class returnType = urls.getClass();
         Class[] parameterTypes = {};
         Class clClass = cl.getClass();
         Method getURLs = clClass.getMethod("getURLs", parameterTypes);
         if( returnType.isAssignableFrom(getURLs.getReturnType()) )
         {
            Object[] args = {};
            urls = (URL[]) getURLs.invoke(cl, args);
         }
         if( urls == null || urls.length == 0 )
         {
            Method getCp = clClass.getMethod("getClasspath", parameterTypes);
            if( returnType.isAssignableFrom(getCp.getReturnType()) )
            {
               Object[] args = {};
               urls = (URL[]) getCp.invoke(cl, args);
            }
         }
      }
      catch(Exception ignore)
      {
      }
      return urls;
   }
public static URL[] getClassLoaderURLs(ClassLoader cl)
   {
      URL[] urls = {};
      try
      {
         Class returnType = urls.getClass();
         Class[] parameterTypes = {};
         Class clClass = cl.getClass();
         Method getURLs = clClass.getMethod("getURLs", parameterTypes);
         if( returnType.isAssignableFrom(getURLs.getReturnType()) )
         {
            Object[] args = {};
            urls = (URL[]) getURLs.invoke(cl, args);
         }
         if( urls == null || urls.length == 0 )
         {
            Method getCp = clClass.getMethod("getClasspath", parameterTypes);
            if( returnType.isAssignableFrom(getCp.getReturnType()) )
            {
               Object[] args = {};
               urls = (URL[]) getCp.invoke(cl, args);
            }
         }
      }
      catch(Exception ignore)
      {
      }
      return urls;
   }
public static URL [ ] getClassLoaderURLs ( ClassLoader cl ) { URL [ ] urls = { } ; try { Class returnType = urls . getClass ( ) ; Class [ ] parameterTypes = { } ; Class clClass = cl . getClass ( ) ; Method getURLs = clClass . getMethod ( "getURLs" , parameterTypes ) ; if ( returnType . isAssignableFrom ( getURLs . getReturnType ( ) ) ) { Object [ ] args = { } ; urls = ( URL [ ] ) getURLs . invoke ( cl , args ) ; } if ( urls == null || urls . length == 0 ) { Method getCp = clClass . getMethod ( "getClasspath" , parameterTypes ) ; if ( returnType . isAssignableFrom ( getCp . getReturnType ( ) ) ) { Object [ ] args = { } ; urls = ( URL [ ] ) getCp . invoke ( cl , args ) ; } } } catch ( Exception ignore ) { } return urls ; }
Use reflection to access a URL[] getURLs or URL[] getClasspath method so
that non-URLClassLoader class loaders, or class loaders that override
getURLs to return null or empty, can provide the true classpath info.
@param cl
@return the urls
Use reflection to access a URL [] getURLs or URL [] getClasspath method so that non - URLClassLoader class loaders or class loaders that override getURLs to return null or empty can provide the true classpath info .