Я столкнулся с небольшой проблемой, пока я делал простой API для внутреннего кода регистрации и входа на веб-сайт с устройством FIDO.Обертка исключения при обертке сторонней библиотеки
Я в основном обертываю библиотеку yubico u2f и делаю ее еще более простой в использовании. Проблема, с которой я столкнулась, связана с исключениями, я хочу выбросить из моего API на серверный сервер com.yubico.u2f.exceptions.NoEligableDevicesException
, но я не хочу, чтобы мой пользователь (разработчик backend) когда-либо видел или импортировал библиотеку yubico.
Поэтому мое решение было обернуть это исключение следующим образом:
package com.github.dkanellis.fikey.exceptions;
import com.yubico.u2f.data.DeviceRegistration;
public class NoEligableDevicesException extends com.yubico.u2f.exceptions.NoEligableDevicesException {
public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message, Throwable cause) {
super(devices, message, cause);
}
public NoEligableDevicesException(Iterable<? extends DeviceRegistration> devices, String message) {
super(devices, message);
}
}
, а затем throw
пользователь моего исключения, оборачивает исключение Yubico. Проблема в том, что это добавляет сложности к моему коду и каждый раз, когда возникает исключение com.yubico.u2f.exceptions.NoEligableDevicesException
, я должен его поймать и выбросить com.github.dkanellis.fikey.exceptions.NoEligableDevicesException
.
Есть ли лучший способ сделать это?
Не то, чтобы я мог видеть. (Обратите внимание: использование 'com.github' в качестве базового пакета, вероятно, не является хорошей идеей, если вы на самом деле не работаете в GitHub.) –
@RedRoboHood Я помню, как люди говорили, чтобы сделать это, если у вас нет веб-сайта (потому что в основном по профилю github - мой сайт). Есть ли еще другие соглашения для людей без веб-сайтов? –
Без просмотра вашего кода и уровня абстракции трудно сказать. Вам следует использовать внутренние методы, которые уже завершают исключение. Затем вы уменьшаете места. Это не сработает, если вы обернете API 1: 1 (но вы заявили, что не используете). – eckes