code: public void write(ObjectWriter out, PersistedNodeData nodeData) throws IOException
     {
        // write id
        out.writeInt(SerializationConstants.PERSISTED_NODE_DATA);
  
        // TransientItemData
        out.writeString(nodeData.getQPath().getAsString());
        out.writeString(nodeData.getIdentifier());
  
        if (nodeData.getParentIdentifier() != null)
        {
           out.writeByte(SerializationConstants.NOT_NULL_DATA);
           out.writeString(nodeData.getParentIdentifier());
        }
        else
           out.writeByte(SerializationConstants.NULL_DATA);
  
        out.writeInt(nodeData.getPersistedVersion());
        // -------------------
  
        out.writeInt(nodeData.getOrderNumber());
  
        // primary type
        out.writeString(nodeData.getPrimaryTypeName().getAsString());
  
        // mixins
        InternalQName[] mixinNames = nodeData.getMixinTypeNames();
  
        if (mixinNames != null)
        {
           out.writeByte(SerializationConstants.NOT_NULL_DATA);
           out.writeInt(mixinNames.length);
           for (int i = 0; i < mixinNames.length; i++)
           {
              out.writeString(mixinNames[i].getAsString());
           }
        }
        else
        {
           out.writeByte(SerializationConstants.NULL_DATA);
        }
  
        ACLWriter wr = new ACLWriter();
  
        AccessControlList acl = nodeData.getACL();
        if (acl != null)
        {
           out.writeByte(SerializationConstants.NOT_NULL_DATA);
           wr.write(out, acl);
        }
        else
        {
           out.writeByte(SerializationConstants.NULL_DATA);
        }
     }
docs: Write to stream all necessary object data.
  
  @param out SerializationOutputStream.
  @throws IOException If an I/O error has occurred.