欢迎光临
我们一直在努力

在java调试中如何获得被装载类的实际路径-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

java.security.codesource;

java.security.protectiondomain;

codesource 可以给出类的原始url的位置,但并不是每个类都有codesource。如果类通过引导类装载器装载,codesource为空。

import java.lang.reflect.method;

import java.net.url;

import java.security.codesource;

import java.security.protectiondomain;

public class debug

{

public static void displayclassinfo(class clazz, stringbuffer results)

{

displayclassinfo(clazz, results, true);

}

public static void displayclassinfo(class clazz, stringbuffer results,

boolean showparentclassloaders)

{

classloader cl = clazz.getclassloader();

results.append("\n"+clazz.getname()+"("+integer.tohexstring(clazz.hashcode())+").classloader="+cl);

classloader parent = cl;

while( parent != null )

{

results.append("\n.."+parent);

url[] urls = getclassloaderurls(parent);

int length = urls != null ? urls.length : 0;

for(int u = 0; u < length; u ++)

{

results.append("\n…."+urls[u]);

}

if( showparentclassloaders == false )

break;

if( parent != null )

parent = parent.getparent();

}

codesource clazzcs = clazz.getprotectiondomain().getcodesource();

if( clazzcs != null )

results.append("\n++++codesource: "+clazzcs);

else

results.append("\n++++null codesource");

results.append("\nimplemented interfaces:");

class[] ifaces = clazz.getinterfaces();

for(int i = 0; i < ifaces.length; i ++)

{

class iface = ifaces[i];

results.append("\n++"+iface+"("+integer.tohexstring(iface.hashcode())+")");

classloader loader = ifaces[i].getclassloader();

results.append("\n++++classloader: "+loader);

protectiondomain pd = ifaces[i].getprotectiondomain();

codesource cs = pd.getcodesource();

if( cs != null )

results.append("\n++++codesource: "+cs);

else

results.append("\n++++null codesource");

}

}

/** use reflection to access a url[] geturls or ulr[] getallurls method so

that non-urlclassloader class loaders, or class loaders that override

geturls to return null or empty, can provide the true classpath info.

*/

public static url[] getclassloaderurls(classloader cl)

{

url[] urls = {};

try

{

class returntype = urls.getclass();

class[] parametertypes = {};

method geturls = cl.getclass().getmethod("geturls", parametertypes);

if( returntype.isassignablefrom(geturls.getreturntype()) )

{

object[] args = {};

urls = (url[]) geturls.invoke(cl, args);

}

}

catch(exception ignore)

{

}

return urls;

}

}

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » 在java调试中如何获得被装载类的实际路径-JSP教程,Java技巧及代码
分享到: 更多 (0)