error :com.sun.crypto.provider.AESCipher$General cannot be cast to javax.crypto.CipherSpi
error :com.sun.crypto.provider.AESCipher$General cannot be cast to javax.crypto.CipherSpi
您好,我在我的 Liferay dxp 项目中使用 Paytm 校验和依赖项
但我得到 error :com.sun.crypto.provider.AESCipher$General cannot be cast to javax.crypto.CipherSpi
Gradle 属性:
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;
}
假设根据静态 class 层次结构,您希望 com.sun.crypto.provider.AESCipher$General
是 javax.crypto.CipherSpi
的有效子 class,您正在处理重复项classes 在 class 路径上 - 但是你得到它们。
compileInclude 是一个很好的候选者,它可以在 class 路径上包含比您想要的更多的代码,即复制 classes,否则将通过常规 class 加载机制。
不幸的是,此错误消息没有告诉您 class 加载每个提到的 class 的加载程序。并且很可能是重复的 superclass。您通常可以将错误消息阅读为
com.sun.crypto.provider.AESCipher$General
cannot be cast to javax.crypto.CipherSpi
loaded from classloader A - however, it could be cast to javax.crypto.CipherSpi
from classloader B.
不幸的是,在这种情况下,您必须自己找到 classloader A 和 B,但是如果您在 class 上的任何位置查找 CipherSpi
的位置路径,你应该能够找到它。它通常已经提供,你不应该自己带它。
您好,我在我的 Liferay dxp 项目中使用 Paytm 校验和依赖项
但我得到 error :com.sun.crypto.provider.AESCipher$General cannot be cast to javax.crypto.CipherSpi
Gradle 属性:
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;
}
假设根据静态 class 层次结构,您希望 com.sun.crypto.provider.AESCipher$General
是 javax.crypto.CipherSpi
的有效子 class,您正在处理重复项classes 在 class 路径上 - 但是你得到它们。
compileInclude 是一个很好的候选者,它可以在 class 路径上包含比您想要的更多的代码,即复制 classes,否则将通过常规 class 加载机制。
不幸的是,此错误消息没有告诉您 class 加载每个提到的 class 的加载程序。并且很可能是重复的 superclass。您通常可以将错误消息阅读为
com.sun.crypto.provider.AESCipher$General
cannot be cast tojavax.crypto.CipherSpi
loaded from classloader A - however, it could be cast tojavax.crypto.CipherSpi
from classloader B.
不幸的是,在这种情况下,您必须自己找到 classloader A 和 B,但是如果您在 class 上的任何位置查找 CipherSpi
的位置路径,你应该能够找到它。它通常已经提供,你不应该自己带它。