Program: 64479
Project: 64479
Buggy source:
public boolean startElement(XPathFragment xPathFragment,UnmarshalRecord unmarshalRecord,Attributes atts){
  try {
    unmarshalRecord.removeNullCapableValue(this);
    Descriptor xmlDescriptor=(Descriptor)xmlCompositeObjectMapping.getReferenceDescriptor();
    if (null == xmlDescriptor) {
      xmlDescriptor=findReferenceDescriptor(xPathFragment,unmarshalRecord,atts,xmlCompositeObjectMapping,xmlCompositeObjectMapping.getKeepAsElementPolicy());
      if (xmlDescriptor == null) {
        if (xmlCompositeObjectMapping.getField() != null) {
          QName leafType=((Field)xmlCompositeObjectMapping.getField()).getLastXPathFragment().getLeafElementType();
          if (leafType != null) {
            XPathFragment frag=new XPathFragment();
            frag.setNamespaceAware(unmarshalRecord.isNamespaceAware());
            String xpath=leafType.getLocalPart();
            String uri=leafType.getNamespaceURI();
            if (uri != null && uri.length() > 0) {
              frag.setNamespaceURI(uri);
              String prefix=((Descriptor)xmlCompositeObjectMapping.getDescriptor()).getNonNullNamespaceResolver().resolveNamespaceURI(uri);
              if (prefix != null && prefix.length() > 0) {
                xpath=prefix + XMLConstants.COLON + xpath;
              }
            }
            frag.setXPath(xpath);
            XMLContext xmlContext=unmarshalRecord.getUnmarshaller().getXMLContext();
            xmlDescriptor=xmlContext.getDescriptorByGlobalType(frag);
          }
        }
      }
      UnmarshalKeepAsElementPolicy policy=xmlCompositeObjectMapping.getKeepAsElementPolicy();
      if (((xmlDescriptor == null) && (policy == UnmarshalKeepAsElementPolicy.KEEP_UNKNOWN_AS_ELEMENT)) || (policy == UnmarshalKeepAsElementPolicy.KEEP_ALL_AS_ELEMENT)) {
        if (unmarshalRecord.getTypeQName() != null) {
          Class theClass=(Class)((XMLConversionManager)unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager()).getDefaultXMLTypes().get(unmarshalRecord.getTypeQName());
          if (theClass == null) {
            setupHandlerForKeepAsElementPolicy(unmarshalRecord,xPathFragment,atts);
            return true;
          }
        }
 else {
          setupHandlerForKeepAsElementPolicy(unmarshalRecord,xPathFragment,atts);
          return true;
        }
      }
    }
    AbstractNullPolicy nullPolicy=xmlCompositeObjectMapping.getNullPolicy();
    if (nullPolicy.isNullRepresentedByEmptyNode()) {
      String qnameString=xPathFragment.getLocalName();
      if (xPathFragment.getPrefix() != null) {
        qnameString=xPathFragment.getPrefix() + XMLConstants.COLON + qnameString;
      }
      if (null != xmlDescriptor) {
        CompositeObjectMappingContentHandler aHandler=new CompositeObjectMappingContentHandler(unmarshalRecord,this,xmlCompositeObjectMapping,atts,xPathFragment,xmlDescriptor);
        aHandler.startElement(xPathFragment.getNamespaceURI(),xPathFragment.getLocalName(),qnameString,atts);
        XMLReader xmlReader=unmarshalRecord.getXMLReader();
        xmlReader.setContentHandler(aHandler);
        xmlReader.setLexicalHandler(aHandler);
      }
    }
 else {
      if (nullPolicy.isNullRepresentedByXsiNil() && unmarshalRecord.isNil()) {
        xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(),null);
      }
 else {
        Field xmlFld=(Field)this.xmlCompositeObjectMapping.getField();
        if (xmlFld.hasLastXPathFragment()) {
          unmarshalRecord.setLeafElementType(xmlFld.getLastXPathFragment().getLeafElementType());
        }
        processChild(xPathFragment,unmarshalRecord,atts,xmlDescriptor,xmlCompositeObjectMapping);
      }
    }
  }
 catch (  SAXException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
  return true;
}

Fixed version (ground truth):
public boolean startElement(XPathFragment xPathFragment,UnmarshalRecord unmarshalRecord,Attributes atts){
  try {
    unmarshalRecord.removeNullCapableValue(this);
    Descriptor xmlDescriptor=(Descriptor)xmlCompositeObjectMapping.getReferenceDescriptor();
    if (null == xmlDescriptor) {
      xmlDescriptor=findReferenceDescriptor(xPathFragment,unmarshalRecord,atts,xmlCompositeObjectMapping,xmlCompositeObjectMapping.getKeepAsElementPolicy());
      if (xmlDescriptor == null) {
        if (xmlCompositeObjectMapping.getField() != null) {
          QName leafType=((Field)xmlCompositeObjectMapping.getField()).getLastXPathFragment().getLeafElementType();
          if (leafType != null) {
            XPathFragment frag=new XPathFragment();
            frag.setNamespaceAware(unmarshalRecord.isNamespaceAware());
            String xpath=leafType.getLocalPart();
            String uri=leafType.getNamespaceURI();
            if (uri != null && uri.length() > 0) {
              frag.setNamespaceURI(uri);
              String prefix=((Descriptor)xmlCompositeObjectMapping.getDescriptor()).getNonNullNamespaceResolver().resolveNamespaceURI(uri);
              if (prefix != null && prefix.length() > 0) {
                xpath=prefix + XMLConstants.COLON + xpath;
              }
            }
            frag.setXPath(xpath);
            XMLContext xmlContext=unmarshalRecord.getUnmarshaller().getXMLContext();
            xmlDescriptor=xmlContext.getDescriptorByGlobalType(frag);
          }
        }
      }
      UnmarshalKeepAsElementPolicy policy=xmlCompositeObjectMapping.getKeepAsElementPolicy();
      if (null != policy && ((xmlDescriptor == null && policy.isKeepUnknownAsElement()) || policy.isKeepAllAsElement())) {
        if (unmarshalRecord.getTypeQName() != null) {
          Class theClass=(Class)((XMLConversionManager)unmarshalRecord.getSession().getDatasourcePlatform().getConversionManager()).getDefaultXMLTypes().get(unmarshalRecord.getTypeQName());
          if (theClass == null) {
            setupHandlerForKeepAsElementPolicy(unmarshalRecord,xPathFragment,atts);
            return true;
          }
        }
 else {
          setupHandlerForKeepAsElementPolicy(unmarshalRecord,xPathFragment,atts);
          return true;
        }
      }
    }
    AbstractNullPolicy nullPolicy=xmlCompositeObjectMapping.getNullPolicy();
    if (nullPolicy.isNullRepresentedByEmptyNode()) {
      String qnameString=xPathFragment.getLocalName();
      if (xPathFragment.getPrefix() != null) {
        qnameString=xPathFragment.getPrefix() + XMLConstants.COLON + qnameString;
      }
      if (null != xmlDescriptor) {
        CompositeObjectMappingContentHandler aHandler=new CompositeObjectMappingContentHandler(unmarshalRecord,this,xmlCompositeObjectMapping,atts,xPathFragment,xmlDescriptor);
        aHandler.startElement(xPathFragment.getNamespaceURI(),xPathFragment.getLocalName(),qnameString,atts);
        XMLReader xmlReader=unmarshalRecord.getXMLReader();
        xmlReader.setContentHandler(aHandler);
        xmlReader.setLexicalHandler(aHandler);
      }
    }
 else {
      if (nullPolicy.isNullRepresentedByXsiNil() && unmarshalRecord.isNil()) {
        xmlCompositeObjectMapping.setAttributeValueInObject(unmarshalRecord.getCurrentObject(),null);
      }
 else {
        Field xmlFld=(Field)this.xmlCompositeObjectMapping.getField();
        if (xmlFld.hasLastXPathFragment()) {
          unmarshalRecord.setLeafElementType(xmlFld.getLastXPathFragment().getLeafElementType());
        }
        processChild(xPathFragment,unmarshalRecord,atts,xmlDescriptor,xmlCompositeObjectMapping);
      }
    }
  }
 catch (  SAXException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
  return true;
}