code: @OnMessage
      public void onMessage(String nameAndJsonStr, Session session) {
          String requestClassName = "?";
          try {
              // parse the JSON and get its message POJO
              BasicMessageWithExtraData<BasicMessage> request = new ApiDeserializer().deserialize(nameAndJsonStr);
              requestClassName = request.getBasicMessage().getClass().getName();
              log.infoReceivedWsMessage(requestClassName, session.getId(), endpoint);
  
              handleRequest(session, request);
  
          } catch (Throwable t) {
              log.errorWsCommandExecutionFailure(requestClassName, session.getId(), endpoint, t);
              String errorMessage = "Failed to process message [" + requestClassName + "]";
              sendErrorResponse(session, errorMessage, t);
          }
      }
docs: When a message is received from a WebSocket client, this method will lookup the {@link WsCommand} for the
  given request class and execute it.
  
  @param nameAndJsonStr the name of the API request followed by "=" followed then by the request's JSON data
  @param session the client session making the request