==== 8.3.2 Remote Object Reference Descriptor ==== The remote object reference descriptor includes the remote object identifier, as well as information to instantiate the proxy class on the CAD client. The remote object reference descriptor uses one of two alternate formats. The representation based on the name of the class uses the **remote_ref_with_class** format. The representation based on the names of the implemented remote interfaces uses the **remote_ref_with_interfaces** format. A remote object reference descriptor is therefore defined as follows: Note - Even though this structure uses the C-like "union" notation, the lengths of the alternate representations within the union do not use any padding to normalize their lengths. The following items are in the **remote_ref_descriptor** structure: **ref_null** is the representation of a null reference using the following format: The **remote_ref_id** item must be the reserved value **0xFFFF**. **remote_ref_with_class** is the definition of a remote object reference using the class name and uses the following format: The **remote_ref_id** item represents the remote reference identifier. The value of this field must not be **0xFFFF**, which denotes the **null** reference. The **hash_modifier** item is an UTF-8 string of length specified in the **hash_modifier**_length item and is used to ensure that method identifier hash codes are unique. The **pkg_name_length** item is the number of bytes in the **package_name** item to represent the name of the package in UTF-8 string notation. The value of this item must be non-zero. The **package_name** item is the variable length representation of the fully qualified name of the package which contains the remote class in UTF-8 string notation. The fully qualified name of the package represented here uses the internal form wherein the ASCII periods (**.**) that normally separate the indentifiers that make up the fully qualified name are replaced by ASCII forward slashes (**/**). For example, the internal form of the normally fully qualified package name of the package **java.rmi** is **java/rmi**. The **class_name_length** item is the number of bytes in the **class_name** item to represent the name of the remote class in UTF-8 string notation. The value of this item must be non-zero. The **class_name** item is the variable length representation of the name of the implementation class (or superclass) of the remote object in UTF-8 string notation. The class referenced in the remote object reference descriptor must directly implement a remote interface. If the implementation class of the remote object does not directly implement a remote interface, the class name of the "closest" superclass of the implementation class which directly implements a remote interface must be used. **remote_ref_with_interfaces** item is the definition of a remote object reference using the names of the interfaces and uses the following format: The definition of the **remote_ref_id**, the **hash_modifier_length** and the **hash_modifier** item are the same as that described earlier in the **remote_ref_with_class** structure. The **remote_interface_count** item indicates the number of **rem_interface_def** format entries in the **remote_interfaces** item. This number must be less than 16. The **remote_interfaces** item comprises a sufficient list of **rem_interface_def** format entries containing the names of remote interfaces implemented. This list is such that when combined with their remote superinterfaces, the complete set of remote interfaces implemented by the remote object can be enumerated. The **rem_interface_def** item uses the following format: The items in the **rem_interface_def** structure are as follows: The **pkg_name_length** item is the number of bytes used in the **package_name** item to represent the name of the package in UTF-8 string notation. If the value of this item is **0**, it indicates that the package name of the previous **remote_interfaces** item must be used instead. The value of this item in **remote_interfaces[0]** must not be **0**. The **package_name** item is the **pkg_name_length** byte length representation of the fully qualified name of the package which contains the remote interface in UTF-8 string notation. The fully qualified name of the package represented here uses the internal form wherein the ASCII periods (**.**) that normally separate the indentifiers that make up the fully qualified name are replaced by ASCII forward slashes (**/**). For example, the internal form of the normally fully qualified package name of the package **java.rmi** is **java/rmi**. The **interface_name_length** item is the number of bytes in the **interface_name** item to represent the name of the remote interface in UTF-8 string notation. The **interface_name** item is the variable length representation of the name of the remote interface implemented by the remote object in UTF-8 string notation.