code: private void writeObject(ObjectOutputStream out) throws IOException {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.entry(this, tc, "writeObject");
  
      /* Call the default writeObject */
      out.defaultWriteObject();
  
      try {
        /* Get the flattened version of the message */
        List buffers = jmo.encodeFast(null);
  
        /* Write out the schema defintions needed to decode this message */
        JMFSchema[] schemas = jmo.getEncodingSchemas();
        out.writeInt(schemas.length);
        for (int i = 0; i < schemas.length; i++)
          out.writeObject(schemas[i].toByteArray());
  
        /* Write out the buffers to the ObjectOutputStream */
        out.writeObject(buffers);
      }
      /* The message is not serializable until all required fields have been set */
      catch (MessageEncodeFailedException e) {
        FFDCFilter.processException(e, "com.ibm.ws.sib.mfp.impl.MessageImpl.writeObject", "msg100", this);
        if (TraceComponent.isAnyTracingEnabled() && tc.isDebugEnabled()) SibTr.debug(this, tc, "serialization failed: " + e);
        NotSerializableException newE  = new NotSerializableException();
        newE.initCause(e);
        throw newE;
      }
  
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled()) SibTr.exit(this, tc, "writeObject");
    }
docs: The writeObject method for serialization.
  <p>
  writeObject calls the defaultWriteObject to serialize the existing class,
  however the jmo variable is not serialized as it is transient.
  The method then calls the JMO to get the message encoded to a set of byte
  buffers which it writes to the ObjectOutputStream.
  
  @param out The ObjectOutputStream for serialization.