病体:
MyEclips 6.0.0 +TomCat6.0.14
症状:
出现类似下列异常
异常一:
java.lang.SecurityException:class"org.apache.commons.collections.CursorableLinkedList"'s signer information does not match signer information of other classes in the same package
异常二:
java.lang.SecurityException:class"org.apache.commons.collections.SequencedHashMap"'s signer information does not match signer information of other classes in the same package
病发:
发于Struts + Hibernate 的项目时。单独 Struts1.2项目 和Hibernate3.1项目均正常,两者结合,则症状出现。
病理:
异常是说org.apache.commons.collections的数字签名和其他类的不匹配。注意上面举例的两个异常都是这个“collections”之下;
在Struts 1.2 的核心包里有一个commons-beanutils.jar 这个的版本是1.7.0,里面有commons.collections。而在Hibernate 3.1 的核心包也有一个commons-collections.jar(版本是2.1.1)。有网友说这叫“冲突”,个人认为说“不匹配”
更加合适。后面说明为什么说“不匹配”。
治疗:
将Struts 1.2 的核心包里有一个commons-beanutils.jar 换成commons-beanutils-1.6.0版本的包。(注意文件名改成与原来的相同)
说明:
1.由上面分析找到原来的Struts1.2核心jar包所在的位置变成了 关键,以本人所用环境为例,给出路径如下参考:C:\ProgramFiles\MyEclipse6.0\myeclipse\eclipse\plugins\com.genuitec.eclipse.cross.easystruts.eclipse_6.0.0.zmyeclipse60020070820\data\1.2\lib
2.用commons-beanutils-1.6.0版本替换 现有版本。(注意与原来名字相同)
3.“不匹配”的原因在于,在 原来这个commons-beanutils中的 “overview.html
”中 有如下说明文字:“The Bean-Collections optional distribution contains objects which apply these techniques to collections. They rely on commons-collections 3.0 (or higher). ”明确指出了 “他们要依赖commons-collection3.0或者更高版本,而Hibernate3.1所提供的2.1.1”不符合要求,所以出现了“不匹配”。
既然是“不匹配”问题,自然可以用 调整 不匹配双方的方法来解决,所谓“条条大路通罗马”,且举一例,仅供参考