/**
  * INTERNAL: When using the DOM Platform, this method is responsible for marshalling null values
  * for the XML Composite Object Mapping.
  *
  * @param record
  * @param object
  * @param field
  * @return true if this method caused any objects to be marshaled, else false.
  */
 public boolean compositeObjectMarshal(
     AbstractMarshalRecord record, Object object, Field field, CoreAbstractSession session) {
   if (marshalNullRepresentation == XMLNullRepresentationType.XSI_NIL) {
     record.put(field, XMLRecord.NIL);
     return true;
   } else {
     // EMPTY_NODE - Write out empty element - Required
     if (marshalNullRepresentation == XMLNullRepresentationType.EMPTY_NODE) {
       Node element = XPathEngine.getInstance().createUnownedElement(record.getDOM(), field);
       record.put(field, element);
       return true;
     } else {
       // ABSENT_NODE - Write out nothing - Optional
       return false;
     }
   }
 }
 /** INTERNAL */
 public void directMarshal(Field field, AbstractMarshalRecord record, Object object) {
   Object fieldValue = null;
   if (marshalNullRepresentation == XMLNullRepresentationType.EMPTY_NODE) {
     fieldValue = Constants.EMPTY_STRING;
   } else {
     if (!field.getLastXPathFragment().isAttribute()) {
       if (marshalNullRepresentation == XMLNullRepresentationType.XSI_NIL) {
         fieldValue = XMLRecord.NIL;
       }
     }
   }
   record.put(field, fieldValue);
 }
 @Override
 public List<Namespace> addExtraNamespacesToNamespaceResolver(
     Descriptor desc,
     AbstractMarshalRecord marshalRecord,
     CoreAbstractSession session,
     boolean allowOverride,
     boolean ignoreEqualResolvers) {
   if (rootXPathNode.getNonAttributeChildren() == null) {
     return null;
   } else {
     return marshalRecord.addExtraNamespacesToNamespaceResolver(
         desc, session, allowOverride, ignoreEqualResolvers);
   }
 }