Program: 64915
Project: 64915
Buggy source:
public boolean startElement(XPathFragment xPathFragment,UnmarshalRecord unmarshalRecord,Attributes atts){
  try {
    XMLDescriptor xmlDescriptor=(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor();
    if (xmlDescriptor == null) {
      xmlDescriptor=findReferenceDescriptor(xPathFragment,unmarshalRecord,atts,xmlCompositeCollectionMapping,xmlCompositeCollectionMapping.getKeepAsElementPolicy());
      if (xmlDescriptor == null) {
        if (xmlCompositeCollectionMapping.getNullPolicy().isNullRepresentedByXsiNil()) {
          if (unmarshalRecord.isNil()) {
            getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
            return true;
          }
        }
 else         if (xmlCompositeCollectionMapping.getNullPolicy().valueIsNull(atts)) {
          getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
          return true;
        }
        if (xmlCompositeCollectionMapping.getField() != null) {
          QName leafType=((XMLField)xmlCompositeCollectionMapping.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=((XMLDescriptor)xmlCompositeCollectionMapping.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=xmlCompositeCollectionMapping.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;
        }
      }
    }
    if (xmlCompositeCollectionMapping.getNullPolicy().isNullRepresentedByEmptyNode()) {
      String qnameString=xPathFragment.getLocalName();
      if (xPathFragment.getPrefix() != null) {
        qnameString=xPathFragment.getPrefix() + XMLConstants.COLON + qnameString;
      }
      if (null != xmlDescriptor) {
        CompositeCollectionMappingContentHandler aHandler=new CompositeCollectionMappingContentHandler(unmarshalRecord,this,xmlCompositeCollectionMapping,atts,xPathFragment,xmlDescriptor);
        aHandler.startElement(xPathFragment.getNamespaceURI(),xPathFragment.getLocalName(),qnameString,atts);
        XMLReader xmlReader=unmarshalRecord.getXMLReader();
        xmlReader.setContentHandler(aHandler);
        xmlReader.setLexicalHandler(aHandler);
      }
    }
 else     if (xmlCompositeCollectionMapping.getNullPolicy().isNullRepresentedByXsiNil() && unmarshalRecord.isNil()) {
      getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
    }
 else {
      XMLField xmlFld=(XMLField)this.xmlCompositeCollectionMapping.getField();
      if (xmlFld.hasLastXPathFragment()) {
        unmarshalRecord.setLeafElementType(xmlFld.getLastXPathFragment().getLeafElementType());
      }
      processChild(xPathFragment,unmarshalRecord,atts,xmlDescriptor,xmlCompositeCollectionMapping);
    }
  }
 catch (  SAXException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
  return true;
}

Fixed version (ground truth):
public boolean startElement(XPathFragment xPathFragment,UnmarshalRecord unmarshalRecord,Attributes atts){
  try {
    XMLDescriptor xmlDescriptor=(XMLDescriptor)xmlCompositeCollectionMapping.getReferenceDescriptor();
    if (xmlDescriptor == null) {
      xmlDescriptor=findReferenceDescriptor(xPathFragment,unmarshalRecord,atts,xmlCompositeCollectionMapping,xmlCompositeCollectionMapping.getKeepAsElementPolicy());
      if (xmlDescriptor == null) {
        if (xmlCompositeCollectionMapping.getNullPolicy().isNullRepresentedByXsiNil()) {
          if (unmarshalRecord.isNil()) {
            getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
            return true;
          }
        }
 else         if (xmlCompositeCollectionMapping.getNullPolicy().valueIsNull(atts)) {
          getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
          return true;
        }
        if (xmlCompositeCollectionMapping.getField() != null) {
          QName leafType=((XMLField)xmlCompositeCollectionMapping.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=((XMLDescriptor)xmlCompositeCollectionMapping.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=xmlCompositeCollectionMapping.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=xmlCompositeCollectionMapping.getNullPolicy();
    if (nullPolicy.isNullRepresentedByEmptyNode()) {
      String qnameString=xPathFragment.getLocalName();
      if (xPathFragment.getPrefix() != null) {
        qnameString=xPathFragment.getPrefix() + XMLConstants.COLON + qnameString;
      }
      if (null != xmlDescriptor) {
        CompositeCollectionMappingContentHandler aHandler=new CompositeCollectionMappingContentHandler(unmarshalRecord,this,xmlCompositeCollectionMapping,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()) {
      getContainerPolicy().addInto(null,unmarshalRecord.getContainerInstance(this),unmarshalRecord.getSession());
    }
 else {
      XMLField xmlFld=(XMLField)this.xmlCompositeCollectionMapping.getField();
      if (xmlFld.hasLastXPathFragment()) {
        unmarshalRecord.setLeafElementType(xmlFld.getLastXPathFragment().getLeafElementType());
      }
      processChild(xPathFragment,unmarshalRecord,atts,xmlDescriptor,xmlCompositeCollectionMapping);
    }
  }
 catch (  SAXException e) {
    throw XMLMarshalException.unmarshalException(e);
  }
  return true;
}