Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检测委派任务(SSLEngine)中的异常_Java_Exception_Jsse_Sslengine - Fatal编程技术网

Java 如何检测委派任务(SSLEngine)中的异常

Java 如何检测委派任务(SSLEngine)中的异常,java,exception,jsse,sslengine,Java,Exception,Jsse,Sslengine,我将SSLEngines与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手过程中的某个时刻(可能是在收到ServerHelloDone之后),SSLEngine要求我处理委托的任务 所以我调用getDelegatedTask并调用它的run方法。任务本身调用X509ExtendedKeyManager.getCertificateChain,然后抛出NullPointerException。该异常由握手器捕获并存储以供以后报告 但是,报告是通过调用privatechecktasksho

我将
SSLEngine
s与NIO一起使用,为我的应用程序提供非阻塞SSL连接。在握手过程中的某个时刻(可能是在收到
ServerHelloDone
之后),
SSLEngine
要求我处理委托的任务

所以我调用
getDelegatedTask
并调用它的
run
方法。任务本身调用
X509ExtendedKeyManager.getCertificateChain
,然后抛出
NullPointerException
。该异常由
握手器捕获并存储以供以后报告

但是,报告是通过调用private
checktaskshorn
方法工作的,该方法仅在收到消息或要发送消息时调用。 但是如果没有正确完成
getCertificateChain
,则没有要发送的内容,而另一方也没有发送任何内容,因此没有要接收的内容。因此,异常保持隐藏状态

由于没有任何一方进行,我们有一个活锁。 我找不到任何方法来阻止或检测,除了

  • 使用反射调用
    checktaskshorn
  • 使用一些任务/计时器超时

这两个都不是我想要走的路线…

当任务完成时,您应该重试返回
NEED\u task的操作。


您需要在
KeyManager中查找并修复NPE。

任务完成后,您应该重试返回need\u任务的操作。但是为什么它会抛出一个NullPointerException呢?实际上你是对的。我的代码确实调用了
getHandshakeStatus
并得到了
NEED\u UNWRAP
,但由于
sourceByteBuffer
中没有任何内容,因此内部优化对我进行了位置,并且没有调用
UNWRAP
。请回复您的评论作为答复。