动态invoke的问题?

pcwl 03-06-27

在tomcat服务器下,我在一个servlet里动态调用我的另外一个类的方法。
出错。代码如下
Object obj = ServletHelper.LoadNamedClass(sClsPath,sClsName);
Method method = obj.getClass().getMethod(sMethodName,new Class[]{Document.class});
method.invoke(obj,new Object[]{doc});
如果我把上面的obj换成真正的对象的话调用不会出错(如:aCertReq.reqInputDo(doc);)。
我不用servlet直接在java类里测试动态调用没有这个问题。
我在reqInputDo(doc)里操作过jdbc,代码如下:
Class.forName(device);
m_con = DriverManager.getConnection(url, user, pass);
我怀疑是不是两次动态加载出错(第二次加载数据库驱动)。不是因为找不到数据库驱动的路径。
请帮忙,谢谢!

pcwl
2003-06-27 12:20

解决了,原来是因为这个里面(Object obj = ServletHelper.LoadNamedClass(sClsPath,sClsName);)用的是URLClassLoader(urls);这个好像有改变掉上下文的路径(导致classpath找不到了)。我把它改为了Class.forName();就可以了。