docs: public void restore(ObjectInputStream ois, int dataVersion)
    throws SevereMessageStoreException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.entry(tc,
          "restore",
          new Object[] { ois, new Integer(dataVersion) });
  
     // checkPersistentVersionId(dataVersion);
      if (dataVersion > getPersistentVersion())
      {
  
        SibTr.error(tc, "ITEM_RESTORE_ERROR_CWSIP0261",
          new Object[] {new Integer(getPersistentVersion()),
                        new Integer(dataVersion)});
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "restore", "SIErrorException");
  
        throw new SevereMessageStoreException(
          nls.getFormattedMessage(
            "ITEM_RESTORE_ERROR_CWSIP0261",
            new Object[] {new Integer(getPersistentVersion()),
                          new Integer(dataVersion) },
            null));
      }
  
      BaseDestinationHandler baseDestHandler = null;
  
      PubSubMessageItemStream mis = (PubSubMessageItemStream)getItemStream();
      baseDestHandler  = (BaseDestinationHandler)mis.getItemStream();
      if (baseDestHandler != null) _destinationManager = baseDestHandler.getDestinationManager();
  
      // F001333-14610
      // Make sure we set the durable flag on our subState
      _subState.setDurable(true);
  
      //first we initialize the persistent data
      try
      {
        HashMap hm = (HashMap)ois.readObject();
        _subState.setSubscriberID((String)hm.get("subscriberID"));
        _subState.setTopicSpaceUuid(new SIBUuid12((String)hm.get("topicspace")));
        _subState.setTopicSpaceName((String)hm.get("topicspaceName"));
        _subState.setTopicSpaceBusName((String)hm.get("topicspaceBusName"));
        toBeDeleted = ((Boolean)hm.get("isToBeDeleted")).booleanValue();
  
        boolean isSIBServerSubject = ((Boolean)hm.get("isSIBServerSubject")).booleanValue();
        _subState.setUser((String)hm.get("user"), isSIBServerSubject);
        _topics = (String[])hm.get("topics");
        _subState.setIsCloned(((Boolean)hm.get("isCloned")).booleanValue());
        _subState.setNoLocal(((Boolean)hm.get("isNoLocal")).booleanValue());
  
        // selectorStrings and domains arrived in version 1 of DurableSubscriptionItemStreams
        if( dataVersion < 2 )
        {
          if (_selectors == null)
            this._selectors = new String[1];
  
          if (_domains == null)
            this._domains = new int[1];
  
          this._selectors[0] = (String)hm.get("selectorstring");
          this._domains[0] = ((Integer)hm.get("selectordomain")).intValue();
        }
        else
        {
          _subState.setTargetDestination((String)hm.get("targetDestination"));
          this._selectors = (String[])hm.get("selectors");
          this._domains = (int[])hm.get("domains");
          this._selectorProperties = (HashMap[])hm.get("selectorProperties");
          this._subState.setUserData((HashMap)hm.get("userData"));        
        }
        
        // SelectorProperties arrived in version 2 of DurableSubscriptionItemStreams
        if( dataVersion < PERSISTENT_VERSION)
        {
          if(_selectorProperties == null)
            this._selectorProperties = new HashMap[1];        
        }
        else
        {
          this._selectorProperties = (HashMap[])hm.get("selectorProperties");
        }
      }
      catch (Exception e)
      {
        FFDCFilter.processException(
          e,
          "com.ibm.ws.sib.processor.impl.store.itemstreams.DurableSubscriptionItemStream.restore",
          "1:434:1.95",
          this);
  
        SibTr.exception(tc, e);
  
        if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
          SibTr.exit(tc, "restore", e);
  
        throw new SIErrorException(
          nls.getFormattedMessage(
          "SUBSCRIPTION_WARM_START_ERROR_CWSIP0148",
          new Object[] { _destinationManager.getLocalME().getMessagingEngineName(), e },
            null),
          e);
      }
  
      if(baseDestHandler==null || _destinationManager==null)
      {
        //MP has not been initialized so we must put the stream into doubt
        _inDoubt=true;
      }
      else
      {
        initializeNonPersistent(baseDestHandler);
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        SibTr.exit(tc, "restore");
    }