I've updated the code to have a separate UnregisterNotificationHandlerRequest which will call done() both on its own resultHandler and on the handleNotificationOperation's resultHandler.

I keept separate resultHandlers for RegisterNotificationHandlerRequest & UnregisterNotificationHandlerRequest to ensure that I was returning from the client if the call on the server was successful. Otherwise, I would have to use a latch and a reference to an exception to ensure the method was throwing an exception on the client-side if something failed on the server-side. It looked simpler to use the ResultHandler mechanism to achieve that.