请教classloader问题与类的反射问题
现在我有一段反射代码,通过读配置文件来反射加载类,在j2se中是没有问题的,但是放在web环境却不行,报类找不到的错误
类如下:
import java.io.*;
import org.jdom.input.SAXBuilder;
import org.jdom.Document;
import org.jdom.*;
import java.util.List;
import java.lang.reflect.Method;
import java.lang.reflect.*;
public class Test {
private static String path = null;
public static void init()
{
try {
FileInputStream fi = new FileInputStream(./SynEmip.xml);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(fi);
Element root= doc.getRootElement();
List providerList = root.getChildren();
int len = providerList.size();
cls_provider = new Class[len];
for (int i = 0; i < len; i++) {
Element provider = (Element) providerList.get(i);
String className = provider.getText();
System.out.println("-------->className="+className+"<----------");
//cls_provider[i] = Class.forName(className);也是不行的
cls_provider[i] = Class.forName(className,false,ClassLoader.getSystemClassLoader());
}
}
catch (FileNotFoundException ex) {
ex.printStackTrace();
}
catch (JDOMException ex) {
ex.printStackTrace();
}
catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
test();
}
public static void test()
{
Test test =new Test();
test.testClassLoader();
init();
}
public void testClassLoader()
{
System.out.println("-------->ClassLoader="+this.getClass().getClassLoader().toString()+"<---------");
System.out.println("-------->ClassLoader="+ClassLoader.getSystemClassLoader()+"<---------");
}
}
而那个配置文件也很简单SynEmip.xml
<?xml version="1.0" encoding="GB2312"?>
<providers>
<provider>com.usermanager.syn.service.SynEmipToTestProvider</provider>
</providers>
我把异常也贴出来
-------->ClassLoader=weblogic.utils.classloaders.ChangeAwareClassLoader@74c144( finder: weblogic.utils.classloaders.CodeGenClassFinder@19fc023, annotation: usermgt@usermgt, parent: weblogic.utils.classloaders.GenericClassLoader@13c765e( finder: weblogic.utils.classloaders.CodeGenClassFinder@ff65bf, annotation: usermgt@, parent: weblogic.utils.classloaders.GenericClassLoader@9b86ea( finder: weblogic.utils.classloaders.CodeGenClassFinder@d5714b, annotation: ApplicationClassLoader@, parent: weblogic.utils.classloaders.GenericClassLoader@e7b3f2( finder: weblogic.utils.classloaders.CodeGenClassFinder@100fa88, annotation: null, parent: sun.misc.Launcher$AppClassLoader@19fcc69))))<---------
-------->ClassLoader=sun.misc.Launcher$AppClassLoader@19fcc69<---------
-------->className=
com.usermanager.syn.service.SynEmipToTestProvider
<----------
java.lang.ClassNotFoundException:
com/usermanager/syn/service/SynEmipToTestProvider
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:219)
这是为何阿
异常就出现在“Class.forName(className,false,ClassLoader.getSystemClassLoader());”
这个代码
如果是“Class.forName(className)”也是同样的结果
大虾能解析一下这是为何吗??
再次强调j2se是好的,而web应用不行,我的web应用部署在weblogic上,操作系统是solaris9