我有2个不同的Java项目,其中一个有2个类:dynamicbeans.DynamicBean2
和dynamic.Validator
。ClassCastException当投射到相同的类
在其他项目中,我同时加载动态类,以及它们存储在一个Object
class Form {
Class beanClass;
Class validatorClass;
Validator validator;
}
然后我继续前进,用validatorClass.newInstance()
创建Validator
对象并将其存储在validator
然后创建一个bean对象以及使用beanClass.newInstance()
并将其添加到会话中。
portletRequest.setAttribute("DynamicBean2", bean);
在Form
项目的生命周期,我叫validator.validate()
从会话(我运行WebSphere Portal服务器)加载以前创建的bean对象。当我尝试将此对象转换回DynamicBean2
时,它会因ClassCastException而失败。
当我拉对象回来了使用
faces.getApplication().createValueBinding("#{DynamicBean2}").getValue(faces);
会议并使用.getClass()
我得到dynamicbeans.DynamicBean2
检查类的吧。这是我想要将它转换为的类,但是当我尝试获取ClassCastException时。
为什么我得到这个?
我的猜测(我没有门户服务器的经验)是你正在加载类在不同的portlet,每个都有它自己的类加载器。然后将实例放入会话对象中,当您从错误的portlet(从中创建该portlet)中检索到该实例时,您就有异常。我猜(根据WAS经验),您需要将class放在类加载层次结构中较高的位置,以便它由两个portlet类加载器的父级加载。 – Robin 2009-05-05 20:51:50
即2号细节。 – Robin 2009-05-05 20:52:55
@waxwing这已经有一段时间了。但是,你介意阐述你所说的第一个可能的解决方案吗?我觉得我遇到的问题可以通过这个解决。提前致谢! – 2011-08-16 12:13:20