I spent several hours tracking down a bug that was ultimately caused by an old slf4j*-api.jar in my encompassing project's classpath. The critical error message ("... method not found... isTraceEnabled()...") was silenced by the "catch Throwable" behavior in the org.apache.mina.core.filterchain.DefaultIoFilterChain class. Since the problem was related to the logging classes, the error wasn't logged, and unfortunately, the runtime exception was not allowed to propagate to the console... Instead it was consumed in DefaultIoFilterChain. This left absolutely no clues for debugging why the SSH server just stopped in the middle of key negotiation.
The only evidence of the problem was that the SSHD server I was embedding just stopped in the middle of the key exchange. In order to finally find the problem, I had to track down the last known working part of code in the ssh-core package, and edit your source code to catch and print Throwables. While I appreciate that this was possible because of your open source, it was beyond the normal programmer's expectation for embedding a library. In my google searches for the last printed SSH client debug state message ("debug1: SSH2_MSG_KEXINIT sent") , I found several people over the last few years who have struggled for answers at the same point in the code when using Apache's Mina/sshd. There's no indication that many of them succeeded in tracking down the problem. (I'll go back and leave some breadcrumbs for future travelers, where I have logins.)
My overall point is that it's not nice to catch Throwables.