docs: public SIMessageHandle restoreFromString(String data)
        throws IllegalArgumentException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(tc, "restoreFromString");
  
      if ((data == null) || data.equals(""))
      {
        String badValueType;
        if (data==null) {badValueType = "NULL";}
        else {badValueType = "Empty string";}
  
        String exString = nls.getFormattedMessage("NULL_HANDLE_PASSED_FOR_RESTORE_CWSIF0032"
            ,new Object[] {badValueType}
            ,"restoreFromString called with invalid parameter of "+badValueType+".");
  
        IllegalArgumentException e = new IllegalArgumentException(exString);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(tc, "restoreFromString called with invalid parameter of "+badValueType+".", e);
        throw e;
      }
  
      byte [] bytes = HexString.hexToBin(data,0);
      // try to restore, if there is an IllegalArgumentException let it propagate up
      SIMessageHandle handle = restoreFromBytes(bytes);
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(tc, "restoreFromString");
      return handle;
    }