如何检测委托任务中的异常(SSLEngine)
How to detect exceptions in delegated tasks (SSLEngine)
我将 SSLEngine
s 与 NIO 一起使用来为我的应用程序提供非阻塞 SSL 连接。在握手期间的某个时刻(可能在收到 ServerHelloDone
之后),SSLEngine
要求我处理委托任务。
所以我调用 getDelegatedTask
并调用它的 run
方法。任务本身调用 X509ExtendedKeyManager.getCertificateChain
,后者又抛出一个 NullPointerException
。该异常被 Handshaker
捕获并存储以供以后报告。
然而,报告是通过调用私有 checkTaskThrown
方法来工作的,该方法仅在收到消息或要发送消息时调用。
但是如果 getCertificateChain
没有正确完成,就没有东西可以发送,对方也没有东西发送,所以也没有东西可以接收。因此异常保持隐藏状态。
由于没有一方进行,我们陷入了僵局。
我没有找到任何方法来防止或检测到它,除了
- 使用反射调用
checkTaskThrown
- 使用一些任务/计时器超时
这两个都不是我想走的路...
任务完成后,您应该重试返回 NEED_TASK.
的操作
您需要在 KeyManager.
中找到并修复 NPE
我将 SSLEngine
s 与 NIO 一起使用来为我的应用程序提供非阻塞 SSL 连接。在握手期间的某个时刻(可能在收到 ServerHelloDone
之后),SSLEngine
要求我处理委托任务。
所以我调用 getDelegatedTask
并调用它的 run
方法。任务本身调用 X509ExtendedKeyManager.getCertificateChain
,后者又抛出一个 NullPointerException
。该异常被 Handshaker
捕获并存储以供以后报告。
然而,报告是通过调用私有 checkTaskThrown
方法来工作的,该方法仅在收到消息或要发送消息时调用。
但是如果 getCertificateChain
没有正确完成,就没有东西可以发送,对方也没有东西发送,所以也没有东西可以接收。因此异常保持隐藏状态。
由于没有一方进行,我们陷入了僵局。 我没有找到任何方法来防止或检测到它,除了
- 使用反射调用
checkTaskThrown
- 使用一些任务/计时器超时
这两个都不是我想走的路...
任务完成后,您应该重试返回 NEED_TASK.
您需要在 KeyManager.