As reported on jsr356-experts:
If you have an annotated endpoint via @ClientEndpoint or @ServerEndpoint, can you use the various Session MessageHandler calls?
This would seem to makes sense, but the rules for replacing a "native websocket message type" should still apply, right?
So that if we have a @OnMessage annotated method with a TEXT type (such as String) then Session.addMessageHandler(MessageHandler.Whole<String>) shouldn't work.
Should we be able to remove a @OnMessage annotated method?
Perhaps by exposing these annotated methods a implementation specific MessageHandlers?
Should this also list the annotated @OnMessage methods as MessageHandlers?
It could be argued that it is confusing to have Session.addMessageHandler() fail with a reason that the the native websocket message type is already in use, but not have the means to remove the active one via removeMessageHandler(), or have the means to list them via getMessageHandlers().
This is another area needing clarification in the spec.
A proposal is to have to have the following methods not be available for Annotated WebSocket Endpoints.
Throwing IllegalStateException when attempting to use them.