CentOs中java.lang.NoSuchFieldError:sha224WithRSAEncryption错误的处理
最近在CentOs平台JBoss中部署了所开发的项目,其中使用到Bouncy Castle的jar包bcmail和bcprov,遇到错误:
java.lang.NoSuchFieldError: sha224WithRSAEncryption
at org.bouncycastle.operator.jcajce.OperatorHelper.<clinit>(Unknown Source)
at org.bouncycastle.operator.jcajce.JcaContentSignerBuilder.<init>(Unknown Source)
困扰了数天,尝试多种解决方法:部署至本机windows的tomcat中、jboss中,程序运行正常;部署至CentOs的tomcat中程序也正常。
后来
参考了 http://blog.csdn.net/sebarsunny/article/details/10003571
中描述的方法,成功,从而也就找到了问题的原因,为:“加入了jdk的第三方安全库,需要额外配置”。同时,发现在“百度百科”的“bouncy castle”词条中说得也很明白,附上链接:
http://baike.baidu.com/link?url=WNoOf0o6B7rKp4mfmiUlGbeZfLNtjYTrU-wy2jn-nAgI5bWlaV1j0SHNI0r79frPqAUUJ836U-0x8tyzW0Qv9KALJ7bho6ub6EGaTnoG6KO
我的具体操作是:
1.将jar包bcprov-jdk15-1.46.jar放在了$JAVA_HOME/jre/lib/ext/路径之下
2.在$JAVA_HOME/jre/lib/security/ 中的java.security 文件中,添加:
security.provider.10=org.bouncycastle.jce.provider.BouncyCastleProvider
注意:security.provider.n中的序号n不能与此文件中已有的值重复。
后记:后来发现,其实报错的真正原因是我的jar包与项目中原有的一个jar包冲突了,而此jar包高版本的不兼容低版本的。因此将两个jar包分别放在各自的模块中,而不是公共位置,使得两个模块调用不到对方的jar包就好了。