Jacksum NoSuchAlgorithmException

Я пытаюсь использовать Jacksum API для генерации хеша Whirlpool, но получаю исключение NoSuchAlgorithmException:

import java.security.NoSuchAlgorithmException;
import jonelo.jacksum.JacksumAPI;
import jonelo.jacksum.algorithm.AbstractChecksum;

public static String genHash(String inText) {

    AbstractChecksum checksum = null;
    checksum = JacksumAPI.getChecksumInstance("whirlpool");
    checksum.update(inText.getBytes());
    return checksum.getFormattedValue();

}

Я пробовал другие популярные алгоритмы (sha256, md5), и все они, очевидно, "не такие".

./libsdpg.java:27: error: unreported exception NoSuchAlgorithmException; must be caught or declared to be thrown
    checksum = JacksumAPI.getChecksumInstance("whirlpool");
                                             ^
1 error

РЕДАКТИРОВАТЬ: я добавил try-catch, и теперь он на самом деле получает ошибку.

2 ответа

Решение

Вы на самом деле не "получаете" исключение. Компилятор сообщает вам, что вы не смогли должным образом обработать проверенное исключение.

JacksumAPI#getChecksumInstance(java.lang.String) метод генерирует проверенное исключение с именем NoSuchAlgorithmException, Проверенное исключение должно быть явно обработано (используя try-catch), или метод включения должен объявить, что он выбрасывает его, включив его в свою подпись. Итак, ваши варианты:

try {
   ...
   checksum = JacksumAPI.getChecksumInstance("whirlpool");
   ...
} catch(NoSuchAlgorithmException e) {
   //handle the exception
}

или измените подпись вашего метода на:

public static String genHash(String inText) throws NoSuchAlgorithmException {
    ...
}

Имейте в виду, что второй вариант, который вы просто подняли, поднял обработку на более высокий уровень (т. Е. Где genHash называется); по сути, вам придется справиться с этим в какой-то момент.

Вы не получаете NoSuchAlgorithmException, Вместо этого компилятор говорит, что getChecksumInstance() выдает проверенное исключение, NoSuchAlgorithmException который должен быть обработан, так как вы этого еще не сделали.

Вы можете сделать это либо с помощью предложения throws в вашем genHash()(вам нужно обработать исключение в методе, где genHash() называется хотя)

// Solution 1
public static String genHash(String inText) throws NoSuchAlgorithmException {

или окружив призыв к getChecksumInstance() в пределах try-catch,

// Solution 2
try {
    checksum = JacksumAPI.getChecksumInstance("whirlpool");
} catch(NoSuchAlgorithmException e) {
    // Do something on exception
}
Другие вопросы по тегам