请教classloader问题与类的反射问题

jayli426 2006-06-19 02:12:55
现在我有一段反射代码,通过读配置文件来反射加载类,在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
...全文
282 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
treeroot 2006-06-19
  • 打赏
  • 举报
回复
很正常呀,xml把回车也读出来了,可以使用trim
jayli426 2006-06-19
  • 打赏
  • 举报
回复
现在问题解决拉,说起来有些不可私益??
配置文件改成
"<?xml version="1.0" encoding="GB2312"?>
<providers>
<provider>com.usermanager.syn.service.SynEmipToTestProvider</provider>
</providers>"
就好拉,即把回车去掉拉
原先是
<provider>
com.usermanager.syn.service.SynEmipToTestProvider
</provider>
神奇阿
treeroot 2006-06-19
  • 打赏
  • 举报
回复
怎么执行的?
treeroot 2006-06-19
  • 打赏
  • 举报
回复
web下你们执行的
这个类放在什么地方?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧