Program: 65778
Project: 65778
Buggy source:
/** 
 * @since EclipseLink 2.4
 */
public boolean marshalSingleValue(XPathFragment xPathFragment,MarshalRecord marshalRecord,Object object,Object value,AbstractSession session,NamespaceResolver namespaceResolver,MarshalContext marshalContext,boolean includeRoot){
  if (xPathFragment.hasLeafElementType()) {
    marshalRecord.setLeafElementType(xPathFragment.getLeafElementType());
  }
  XMLMarshaller marshaller=marshalRecord.getMarshaller();
  if (xmlCompositeCollectionMapping.hasConverter()) {
    Converter converter=xmlCompositeCollectionMapping.getConverter();
    if (converter instanceof XMLConverter) {
      value=((XMLConverter)converter).convertObjectValueToDataValue(value,session,marshaller);
    }
 else {
      value=converter.convertObjectValueToDataValue(value,session);
    }
  }
  if (null == value) {
    return xmlCompositeCollectionMapping.getNullPolicy().compositeObjectMarshal(xPathFragment,marshalRecord,object,session,namespaceResolver);
  }
  XMLDescriptor descriptor=(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor();
  if (descriptor == null || descriptor.hasInheritance()) {
    descriptor=(XMLDescriptor)session.getDescriptor(value.getClass());
  }
  UnmarshalKeepAsElementPolicy keepAsElementPolicy=xmlCompositeCollectionMapping.getKeepAsElementPolicy();
  if (((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) && value instanceof org.w3c.dom.Node) {
    marshalRecord.node((org.w3c.dom.Node)value,marshalRecord.getNamespaceResolver());
    return true;
  }
  if (descriptor != null) {
    marshalRecord.beforeContainmentMarshal(value);
    TreeObjectBuilder objectBuilder=(TreeObjectBuilder)descriptor.getObjectBuilder();
    getXPathNode().startElement(marshalRecord,xPathFragment,object,session,namespaceResolver,objectBuilder,value,includeRoot);
    List extraNamespaces=objectBuilder.addExtraNamespacesToNamespaceResolver(descriptor,marshalRecord,session);
    writeExtraNamespaces(extraNamespaces,marshalRecord,session);
    objectBuilder.addXsiTypeAndClassIndicatorIfRequired(marshalRecord,descriptor,(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor(),(XMLField)xmlCompositeCollectionMapping.getField(),false);
    objectBuilder.buildRow(marshalRecord,value,session,marshaller,xPathFragment,WriteType.UNDEFINED);
    marshalRecord.afterContainmentMarshal(object,value);
    marshalRecord.endElement(xPathFragment,namespaceResolver);
    objectBuilder.removeExtraNamespacesFromNamespaceResolver(marshalRecord,extraNamespaces,session);
  }
 else {
    getXPathNode().startElement(marshalRecord,xPathFragment,object,session,namespaceResolver,null,value);
    QName schemaType=getSchemaType((XMLField)xmlCompositeCollectionMapping.getField(),value,session);
    String stringValue=getValueToWrite(schemaType,value,(XMLConversionManager)session.getDatasourcePlatform().getConversionManager(),marshalRecord);
    updateNamespaces(schemaType,marshalRecord,((XMLField)xmlCompositeCollectionMapping.getField()));
    marshalRecord.characters(stringValue);
    marshalRecord.endElement(xPathFragment,namespaceResolver);
  }
  return true;
}

Fixed version (ground truth):
/** 
 * @since EclipseLink 2.4
 */
public boolean marshalSingleValue(XPathFragment xPathFragment,MarshalRecord marshalRecord,Object object,Object value,AbstractSession session,NamespaceResolver namespaceResolver,MarshalContext marshalContext,boolean includeRoot){
  if (xPathFragment.hasLeafElementType()) {
    marshalRecord.setLeafElementType(xPathFragment.getLeafElementType());
  }
  XMLMarshaller marshaller=marshalRecord.getMarshaller();
  if (xmlCompositeCollectionMapping.hasConverter()) {
    Converter converter=xmlCompositeCollectionMapping.getConverter();
    if (converter instanceof XMLConverter) {
      value=((XMLConverter)converter).convertObjectValueToDataValue(value,session,marshaller);
    }
 else {
      value=converter.convertObjectValueToDataValue(value,session);
    }
  }
  if (null == value) {
    return xmlCompositeCollectionMapping.getNullPolicy().compositeObjectMarshal(xPathFragment,marshalRecord,object,session,namespaceResolver);
  }
  XMLDescriptor descriptor=(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor();
  if (descriptor == null || descriptor.hasInheritance()) {
    descriptor=(XMLDescriptor)session.getDescriptor(value.getClass());
  }
  UnmarshalKeepAsElementPolicy keepAsElementPolicy=xmlCompositeCollectionMapping.getKeepAsElementPolicy();
  if (((keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT) || (keepAsElementPolicy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) && value instanceof org.w3c.dom.Node) {
    marshalRecord.node((org.w3c.dom.Node)value,marshalRecord.getNamespaceResolver());
    return true;
  }
  if (descriptor != null) {
    marshalRecord.beforeContainmentMarshal(value);
    TreeObjectBuilder objectBuilder=(TreeObjectBuilder)descriptor.getObjectBuilder();
    getXPathNode().startElement(marshalRecord,xPathFragment,object,session,namespaceResolver,objectBuilder,value,includeRoot);
    List extraNamespaces=objectBuilder.addExtraNamespacesToNamespaceResolver(descriptor,marshalRecord,session);
    writeExtraNamespaces(extraNamespaces,marshalRecord,session);
    objectBuilder.addXsiTypeAndClassIndicatorIfRequired(marshalRecord,descriptor,(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor(),(XMLField)xmlCompositeCollectionMapping.getField(),false);
    objectBuilder.buildRow(marshalRecord,value,session,marshaller,xPathFragment,WriteType.UNDEFINED);
    marshalRecord.afterContainmentMarshal(object,value);
    marshalRecord.endElement(xPathFragment,namespaceResolver);
    objectBuilder.removeExtraNamespacesFromNamespaceResolver(marshalRecord,extraNamespaces,session);
  }
 else {
    getXPathNode().startElement(marshalRecord,xPathFragment,object,session,namespaceResolver,null,value);
    QName schemaType=getSchemaType((XMLField)xmlCompositeCollectionMapping.getField(),value,session);
    String stringValue=marshalRecord.getValueToWrite(schemaType,value,(XMLConversionManager)session.getDatasourcePlatform().getConversionManager());
    updateNamespaces(schemaType,marshalRecord,((XMLField)xmlCompositeCollectionMapping.getField()));
    marshalRecord.characters(stringValue);
    marshalRecord.endElement(xPathFragment,namespaceResolver);
  }
  return true;
}