code: public IMessagePublication publish(T message) {
          IMessagePublication publication = createMessagePublication(message);
          try {
              publication.execute();
          } catch (Throwable e) {
              handlePublicationError(new PublicationError()
                      .setMessage("Error during publication of message")
                      .setCause(e)
                      .setPublication(publication));
          }
          finally{
              return publication;
          }
      }
docs: Synchronously publish a message to all registered listeners (this includes listeners defined for super types)
  The call blocks until every messageHandler has processed the message.
  
  @param message