ошибка: com.sun.crypto.provider.AESCipher $ General нельзя преобразовать в javax.crypto.CipherSpi - PullRequest
1 голос
/ 26 марта 2020

Здравствуйте! Я использую зависимость контрольной суммы Paytm в моем проекте Liferay dxp

Но я получаю 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;
}

1 Ответ

0 голосов
/ 26 марта 2020

Предполагая, что согласно иерархии классов stati c вы ожидаете, что 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 в любом месте на вашем пути к классам, вы сможете найти его. Обычно он уже предоставлен, и вы не должны приносить его сами.

...