Throwing an exception in ComputerListener.onOnline should not take a node offline:
However, there a number of issues filed that show exceptions in onOnline not being handled, the latest being one in branch-api:
Here is the code used in on the Master node and the related test:
Here is the code in SlaveComputer.setChannel() and the test file showing no test:
NOTE: the Jenkins.java code is not correct either since it will swallow more than the contract specifies - including NullPointerException for example. Also, it should probably be a WARNING rather than SEVERE.