Program: 65045
Project: 65045
Buggy source:
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException {
  if (getCurrentObject() == null) {
    initializeRecord(atts);
  }
  if ((null != xPathNode.getXPathFragment() && xPathNode.getXPathFragment().nameIsText()) || xpathNodeIsMixedContent) {
    xpathNodeIsMixedContent=false;
    NodeValue xPathNodeUnmarshalNodeValue=xPathNode.getUnmarshalNodeValue();
    if (null != xPathNodeUnmarshalNodeValue) {
      xPathNodeUnmarshalNodeValue.endElement(xPathFragment,this);
      if (xPathNode.getParent() != null) {
        xPathNode=xPathNode.getParent();
      }
    }
  }
  if (null == rootElementName && null == rootElementLocalName && parentRecord == null) {
    rootElementLocalName=localName;
    rootElementName=qName;
    rootElementNamespaceUri=namespaceURI;
    schemaLocation=atts.getValue(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.SCHEMA_LOCATION);
    noNamespaceSchemaLocation=atts.getValue(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.NO_NS_SCHEMA_LOCATION);
  }
  try {
    if (null != selfRecords) {
      for (int x=0, selfRecordsSize=selfRecords.size(); x < selfRecordsSize; x++) {
        UnmarshalRecord selfRecord=selfRecords.get(x);
        if (selfRecord == null) {
          getFragmentBuilder().startElement(namespaceURI,localName,qName,atts);
        }
 else {
          selfRecord.startElement(namespaceURI,localName,qName,atts);
        }
      }
    }
    if (unmappedLevel != -1 && unmappedLevel <= levelIndex) {
      levelIndex++;
      return;
    }
    XPathNode node=getNonAttributeXPathNode(namespaceURI,localName,qName,atts);
    if (null == node && xPathNode.getTextNode() != null) {
      if (textWrapperFragment != null && localName.equals(textWrapperFragment.getLocalName())) {
        node=xPathNode.getTextNode();
      }
    }
    if (null == node) {
      NodeValue parentNodeValue=xPathNode.getUnmarshalNodeValue();
      if ((null == xPathNode.getXPathFragment()) && (parentNodeValue != null)) {
        XPathFragment parentFragment=new XPathFragment();
        parentFragment.setNamespaceAware(isNamespaceAware());
        if (namespaceURI != null && namespaceURI.length() == 0) {
          parentFragment.setLocalName(qName);
          parentFragment.setNamespaceURI(null);
        }
 else {
          parentFragment.setLocalName(localName);
          parentFragment.setNamespaceURI(namespaceURI);
        }
        if (parentNodeValue.startElement(parentFragment,this,atts)) {
          levelIndex++;
        }
 else {
          startUnmappedElement(namespaceURI,localName,qName,atts);
          return;
        }
      }
 else {
        levelIndex++;
        startUnmappedElement(namespaceURI,localName,qName,atts);
        return;
      }
    }
 else {
      xPathNode=node;
      unmarshalContext.startElement(this);
      levelIndex++;
      isXsiNil=atts.getIndex(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.SCHEMA_NIL_ATTRIBUTE) >= 0;
      NodeValue nodeValue=node.getUnmarshalNodeValue();
      if (null != nodeValue) {
        if (!nodeValue.startElement(xPathFragment,this,atts)) {
          startUnmappedElement(namespaceURI,localName,qName,atts);
          return;
        }
      }
      if (xPathNode.getAttributeChildren() != null || xPathNode.getAnyAttributeNodeValue() != null || selfRecords != null) {
        for (int i=0, size=atts.getLength(); i < size; i++) {
          String attNamespace=atts.getURI(i);
          String attLocalName=atts.getLocalName(i);
          String value=atts.getValue(i);
          NodeValue attributeNodeValue=null;
          if ((attLocalName == null) || (attLocalName.length() == 0)) {
            String qname=atts.getQName(i);
            if ((qname != null) && (qname.length() > 0)) {
              int idx=qname.indexOf(XMLConstants.COLON);
              if (idx > 0) {
                attLocalName=qname.substring(idx + 1,qname.length());
                String attPrefix=qname.substring(0,idx);
                if (attPrefix.equals(XMLConstants.XMLNS)) {
                  attNamespace=XMLConstants.XMLNS_URL;
                }
              }
 else {
                attLocalName=qname;
                if (attLocalName.equals(XMLConstants.XMLNS)) {
                  attNamespace=XMLConstants.XMLNS_URL;
                }
              }
            }
          }
          if (this.selfRecords != null) {
            for (int j=0; j < selfRecords.size(); j++) {
              UnmarshalRecord nestedRecord=selfRecords.get(j);
              if (nestedRecord != null) {
                attributeNodeValue=nestedRecord.getAttributeChildNodeValue(attNamespace,attLocalName);
                if (attributeNodeValue != null) {
                  attributeNodeValue.attribute(nestedRecord,attNamespace,attLocalName,value);
                }
              }
            }
          }
          if (attributeNodeValue == null) {
            attributeNodeValue=this.getAttributeChildNodeValue(attNamespace,attLocalName);
            try {
              if (attributeNodeValue != null) {
                attributeNodeValue.attribute(this,attNamespace,attLocalName,value);
              }
 else {
                if (xPathNode.getAnyAttributeNodeValue() != null) {
                  xPathNode.getAnyAttributeNodeValue().attribute(this,attNamespace,attLocalName,value);
                }
              }
            }
 catch (            EclipseLinkException e) {
              if ((null == xmlReader) || (null == xmlReader.getErrorHandler())) {
                throw e;
              }
 else {
                SAXParseException saxParseException=new SAXParseException(e.getLocalizedMessage(),documentLocator,e);
                xmlReader.getErrorHandler().warning(saxParseException);
              }
            }
          }
        }
      }
    }
    if (prefixesForFragment != null) {
      this.prefixesForFragment.clear();
    }
  }
 catch (  EclipseLinkException e) {
    if ((null == xmlReader) || (null == xmlReader.getErrorHandler())) {
      throw e;
    }
 else {
      SAXParseException saxParseException=new SAXParseException(e.getLocalizedMessage(),documentLocator,e);
      xmlReader.getErrorHandler().error(saxParseException);
    }
  }
}

Fixed version (ground truth):
public void startElement(String namespaceURI,String localName,String qName,Attributes atts) throws SAXException {
  if (getCurrentObject() == null) {
    initializeRecord(atts);
  }
  if ((null != xPathNode.getXPathFragment() && xPathNode.getXPathFragment().nameIsText()) || xpathNodeIsMixedContent) {
    xpathNodeIsMixedContent=false;
    NodeValue xPathNodeUnmarshalNodeValue=xPathNode.getUnmarshalNodeValue();
    if (null != xPathNodeUnmarshalNodeValue) {
      xPathNodeUnmarshalNodeValue.endElement(xPathFragment,this);
      if (xPathNode.getParent() != null) {
        xPathNode=xPathNode.getParent();
      }
    }
  }
  if (null == rootElementName && null == rootElementLocalName && parentRecord == null) {
    rootElementLocalName=localName;
    rootElementName=qName;
    rootElementNamespaceUri=namespaceURI;
    schemaLocation=atts.getValue(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.SCHEMA_LOCATION);
    noNamespaceSchemaLocation=atts.getValue(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.NO_NS_SCHEMA_LOCATION);
  }
  try {
    if (null != selfRecords) {
      for (int x=0, selfRecordsSize=selfRecords.size(); x < selfRecordsSize; x++) {
        UnmarshalRecord selfRecord=selfRecords.get(x);
        if (selfRecord == null) {
          getFragmentBuilder().startElement(namespaceURI,localName,qName,atts);
        }
 else {
          selfRecord.startElement(namespaceURI,localName,qName,atts);
        }
      }
    }
    if (unmappedLevel != -1 && unmappedLevel <= levelIndex) {
      levelIndex++;
      return;
    }
    XPathNode node=getNonAttributeXPathNode(namespaceURI,localName,qName,atts);
    if (null == node && xPathNode.getTextNode() != null) {
      if (textWrapperFragment != null && localName.equals(textWrapperFragment.getLocalName())) {
        node=xPathNode.getTextNode();
      }
    }
    if (null == node) {
      NodeValue parentNodeValue=xPathNode.getUnmarshalNodeValue();
      if ((null == xPathNode.getXPathFragment()) && (parentNodeValue != null)) {
        XPathFragment parentFragment=new XPathFragment();
        parentFragment.setNamespaceAware(isNamespaceAware());
        if (namespaceURI != null && namespaceURI.length() == 0) {
          parentFragment.setLocalName(qName);
          parentFragment.setNamespaceURI(null);
        }
 else {
          parentFragment.setLocalName(localName);
          parentFragment.setNamespaceURI(namespaceURI);
        }
        if (parentNodeValue.startElement(parentFragment,this,atts)) {
          levelIndex++;
        }
 else {
          startUnmappedElement(namespaceURI,localName,qName,atts);
          return;
        }
      }
 else {
        levelIndex++;
        startUnmappedElement(namespaceURI,localName,qName,atts);
        return;
      }
    }
 else {
      xPathNode=node;
      unmarshalContext.startElement(this);
      levelIndex++;
      isXsiNil=atts.getValue(XMLConstants.SCHEMA_INSTANCE_URL,XMLConstants.SCHEMA_NIL_ATTRIBUTE) != null;
      NodeValue nodeValue=node.getUnmarshalNodeValue();
      if (null != nodeValue) {
        if (!nodeValue.startElement(xPathFragment,this,atts)) {
          startUnmappedElement(namespaceURI,localName,qName,atts);
          return;
        }
      }
      if (xPathNode.getAttributeChildren() != null || xPathNode.getAnyAttributeNodeValue() != null || selfRecords != null) {
        for (int i=0, size=atts.getLength(); i < size; i++) {
          String attNamespace=atts.getURI(i);
          String attLocalName=atts.getLocalName(i);
          String value=atts.getValue(i);
          NodeValue attributeNodeValue=null;
          if ((attLocalName == null) || (attLocalName.length() == 0)) {
            String qname=atts.getQName(i);
            if ((qname != null) && (qname.length() > 0)) {
              int idx=qname.indexOf(XMLConstants.COLON);
              if (idx > 0) {
                attLocalName=qname.substring(idx + 1,qname.length());
                String attPrefix=qname.substring(0,idx);
                if (attPrefix.equals(XMLConstants.XMLNS)) {
                  attNamespace=XMLConstants.XMLNS_URL;
                }
              }
 else {
                attLocalName=qname;
                if (attLocalName.equals(XMLConstants.XMLNS)) {
                  attNamespace=XMLConstants.XMLNS_URL;
                }
              }
            }
          }
          if (this.selfRecords != null) {
            for (int j=0; j < selfRecords.size(); j++) {
              UnmarshalRecord nestedRecord=selfRecords.get(j);
              if (nestedRecord != null) {
                attributeNodeValue=nestedRecord.getAttributeChildNodeValue(attNamespace,attLocalName);
                if (attributeNodeValue != null) {
                  attributeNodeValue.attribute(nestedRecord,attNamespace,attLocalName,value);
                }
              }
            }
          }
          if (attributeNodeValue == null) {
            attributeNodeValue=this.getAttributeChildNodeValue(attNamespace,attLocalName);
            try {
              if (attributeNodeValue != null) {
                attributeNodeValue.attribute(this,attNamespace,attLocalName,value);
              }
 else {
                if (xPathNode.getAnyAttributeNodeValue() != null) {
                  xPathNode.getAnyAttributeNodeValue().attribute(this,attNamespace,attLocalName,value);
                }
              }
            }
 catch (            EclipseLinkException e) {
              if ((null == xmlReader) || (null == xmlReader.getErrorHandler())) {
                throw e;
              }
 else {
                SAXParseException saxParseException=new SAXParseException(e.getLocalizedMessage(),documentLocator,e);
                xmlReader.getErrorHandler().warning(saxParseException);
              }
            }
          }
        }
      }
    }
    if (prefixesForFragment != null) {
      this.prefixesForFragment.clear();
    }
  }
 catch (  EclipseLinkException e) {
    if ((null == xmlReader) || (null == xmlReader.getErrorHandler())) {
      throw e;
    }
 else {
      SAXParseException saxParseException=new SAXParseException(e.getLocalizedMessage(),documentLocator,e);
      xmlReader.getErrorHandler().error(saxParseException);
    }
  }
}