您好,我在Liferay dxp项目中使用Paytm校验和依赖性
但是我越来越 error :com.sun.crypto.provider.AESCipher$General cannot be cast to javax.crypto.CipherSpi
摇篮特性:
dependencies {compile fileTree(dir: 'libs/', include: '*.jar') compileInclude name: 'paytmchecksum-1.1'}
PaytmUtil包含以下代码。
private static String getCheckSumPayTm(TreeMap<String, String> reqMap){
CheckSumServiceHelper checkSumServiceHelper = CheckSumServiceHelper.getCheckSumServiceHelper();
String checksum = null;
try {
checksum = checkSumServiceHelper.genrateCheckSum("paytmKey", reqMap.toString());
log.info("PAYTM CHECKSUM ================== " + checksum);
} catch (Exception e) {
e.printStackTrace();
log.error("error :" + e.getMessage());
}
return checksum;
}
假设根据静态类层次结构,您期望com.sun.crypto.provider.AESCipher$General
是的有效子类javax.crypto.CipherSpi
,那么您正在处理类路径上的重复类-但是会得到它们。
compileInclude是一个不错的选择,因为它可以在类路径上包含比您想要的更多的代码,即,复制本应通过常规类加载机制生成的类。
不幸的是,此错误消息没有告诉您的是加载每个提到的类的类加载器。而且很可能是超类重复了。您通常可以将错误消息读取为
com.sun.crypto.provider.AESCipher$General
无法javax.crypto.CipherSpi
从类加载器A强制转换为加载-但是,可以javax.crypto.CipherSpi
从类加载器B 强制转换为强制。
不幸的是,在这种情况下,您将不得不自己找到类加载器A和B,但是如果您CipherSpi
在类路径上查找任何位置,则应该可以找到它。通常已经提供了它,您不应该自己带它。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句