code: @Override
      public JsMessage getMessage()
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.entry(tc, "getMessage");
  
          // We hold a reference to the root JsMessage so that an individual subscription
          // can choose to release its reference to it withour wiping it out for all the
          // others.
  
          // Try to get hold of the reference without using a lock, if that works then great...
          JsMessage localMsg = jsMsg;
  
          // Otherwise we need to lock it down and retrieve the message from the root message
          // (who may need to restore it from the MsgStore)
          if (localMsg == null)
          {
              synchronized (this)
              {
                  jsMsg = getMessageItem().getMessage();
                  localMsg = jsMsg;
              }
          }
  
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              SibTr.exit(tc, "getMessage", localMsg);
  
          return localMsg;
      }
docs: Get the underlying message object
  
  @return The underlying message object