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
}