docs: public boolean hasNext() throws SISessionUnavailableException, SISessionDroppedException, SIIncorrectCallException
    {
      if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
        SibTr.entry(CoreSPILockedMessageEnumeration.tc, "hasNext",
          new Object[] {new Integer(hashCode()), this});
  
      boolean hasNext = false;
  
      checkValidState("hasNext");
  
      localConsumerPoint.checkNotClosed();
  
      synchronized(this)
      {
        if(!endReached)
        {
          // If currentMsg is null it means we start from the begining
          if(currentMsg == null)
          {
            if(firstMsg != null)
              hasNext = true;
          }
          else
          {
            if(currentMsg.next != null)
              hasNext = true;
          }
        }
      }
  
      if (TraceComponent.isAnyTracingEnabled() && CoreSPILockedMessageEnumeration.tc.isEntryEnabled())
        SibTr.exit(CoreSPILockedMessageEnumeration.tc, "hasNext", new Boolean(hasNext));
  
      return hasNext;
    }