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