SSLEngines を NIO と一緒に使用して、アプリケーションにノンブロッキング SSL 接続を提供します。ハンドシェイク中のある時点で (おそらく を受け取った後ServerHelloDone)、SSLEngine委任されたタスクを処理する必要があります。
だから私はgetDelegatedTaskそれのrunメソッドを呼び出して呼び出します。タスク自体が を呼び出しX509ExtendedKeyManager.getCertificateChain、次にNullPointerException. その例外は によってキャッチされHandshaker、後でレポートするために保存されます。
checkTaskThrownただし、レポートは、メッセージが受信されたとき、またはメッセージが送信されるときにのみ呼び出されるプライベート メソッドを呼び出すことによって機能します。しかしgetCertificateChain、正しく完了しなければ、送信するものは何もなく、相手も何も送信しないため、受信するものはありません。したがって、例外は非表示のままです。
どちらの側も進まないので、ライブロックがあります。そして、それを防止または検出する方法を見つけられませんでした。
- リフレクションを使用して呼び出す
checkTaskThrown - タイムアウトのためにいくつかのタスク/タイマーを使用する
どちらも私の行きたい道ではない…