docs: private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "readObject");
  
      /* Call the default readObject */
      in.defaultReadObject();
  
      try {
        /* Recover schemas needed for this message and ensure they are registered */
        int schemaCount = in.readInt();
        for (int i = 0; i < schemaCount; i++) {
          byte[] schemaDef = (byte[])in.readObject();
          JMFSchema schema = JMFRegistry.instance.createJMFSchema(schemaDef);
          JMFRegistry.instance.register(schema);
        }
  
        /* Recover the flattened version of the message */
        List buffers  = (List)in.readObject();
  
        /* Create a new unparsed JMO and set the jmo variable */
        JsMsgObject newJmo = new JsMsgObject(null, null, buffers);
        setJmo(newJmo);
  
        /* Set the transient approxLength & fluffedSize fields if appropriate */
        // This should really be done by a readObject() implementation in JsMessageImpl
        // but that could be confusing as we're used to all the odd bits being done in
        // this one method.
        if (this instanceof JsMessageImpl) {
          // We know this, because we already have an encoded form.
          ((JsMessageImpl)this).setApproximateLength(newJmo.getOriginalLength());
          // We have no idea what this is, so initialize it to -1.
          ((JsMessageImpl)this).setFluffedSize(-1);
        }
      }
      /* If the message was serialized but can't be de-serialized, someone must */
      /* have chewed up the Stream.                                             */
      catch (MessageDecodeFailedException e) {
        FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.MessageImpl.readObject", "msg200", this);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "deserialization failed: " + e);
        StreamCorruptedException newE  = new StreamCorruptedException();
        newE.initCause(e);
        throw newE;
      }
      /* If we fail to register a required schema, something has gone horribly wrong */
      catch (JMFSchemaIdException e) {
        FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.MessageImpl.readObject", "msg201", this);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "deserialization failed: " + e);
        InvalidObjectException newE  = new InvalidObjectException(e.getMessage());
        newE.initCause(e);
        throw newE;
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "readObject");
    }