Как обнаружить исключения в делегированных задачах (SSLEngine)
Я использую SSLEngine
s вместе с NIO для обеспечения неблокирующих соединений SSL для моего приложения. В какой-то момент во время рукопожатия (вероятно, после получения ServerHelloDone
) SSLEngine
требует, чтобы я обработал делегированную задачу.
Так я звоню getDelegatedTask
и назовите это run
метод. Сама задача вызывает X509ExtendedKeyManager.getCertificateChain
, который в свою очередь бросает NullPointerException
, Это исключение пойман Handshaker
и хранится для последующего сообщения.
Однако отчетность работает, позвонив частному checkTaskThrown
метод, который вызывается только тогда, когда сообщение было получено или сообщение должно быть отправлено. Но без getCertificateChain
чтобы завершить правильно, отправлять нечего, а другая сторона тоже ничего не отправляет, поэтому получать нечего. Следовательно, исключение остается скрытым.
Поскольку никакая сторона не продолжается, у нас есть живой замок. И я не нашел способа предотвратить или обнаружить это, кроме
- Использование отражения для вызова
checkTaskThrown
- Используйте некоторое задание / таймер для тайм-аута
Ни по какому маршруту я не хочу идти...
1 ответ
Когда задача завершится, вы должны повторить операцию, которая вернулась NEED_TASK.
Вам нужно найти и исправить NPE в вашем KeyManager.