包装第三方库时包装异常

时间:2015-06-28 13:01:01

标签: java exception wrapper libraries fido-u2f

我在为使用FIDO设备的网站注册和登录的后端代码制作一个简单的API时遇到了一个小问题。

我基本上包装yubico u2f库并使其更简单易用。我遇到的问题是异常,我想从我的API到后端服务器抛出com.yubico.u2f.exceptions.NoEligableDevicesException异常,但我不希望我的用户(后端开发人员)必须看到或导入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

有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

  

问题是这增加了我的代码的复杂性,每次发生com.yubico.u2f.exceptions.NoEligableDevicesException异常时我都要抓住它并抛出com.github.dkanellis.fikey.exceptions.NoEligableDevicesException。

这不是问题。这实际上是在应用程序的不同层之间传播Exception的推荐方法。我最近发表了this关于宣传Exception的精彩文章。 (它是.Net文章但仍适用于Java)

将实际的Exception包装到您自己的Exception子类中,您可以灵活地更改API的基础依赖项,而不会破坏客户端代码。客户端代码继续依赖于您的Exception子类。