Program: 16987
Project: 16987
Buggy source:
/** 
 * <residue dbResNum="1" dbResName="THR"> <crossRefDb dbSource="PDB" dbVersion="20101103" dbCoordSys="PDBresnum" dbAccessionId="1a4w" dbResNum="1H" dbResName="THR" dbChainId="L"></crossRefDb> <crossRefDb dbSource="UniProt" dbVersion="157-2" dbCoordSys="UniProt" dbAccessionId="P00734" dbResNum="328" dbResName="T"></crossRefDb> <crossRefDb dbSource="SCOP" dbVersion="1.75" dbCoordSys="PDBresnum" dbAccessionId="26083" dbResNum="1H" dbResName="THR" dbChainId="L"></crossRefDb> <residueDetail dbSource="MSD" property="Annotation"> Not_Observed</residueDetail> </residue>
 */
private SiftsResidue getResidue(Element residue){
  SiftsResidue res=new SiftsResidue();
  String dbResNumS=residue.getAttribute("String_Node_Str");
  res.setNaturalPos(Integer.parseInt(dbResNumS));
  String seqResName=residue.getAttribute("String_Node_Str");
  res.setSeqResName(seqResName);
  boolean observed=true;
  String detail=getTextValue(residue,"String_Node_Str");
  if (detail != null)   if (detail != null && detail.trim().equalsIgnoreCase("String_Node_Str")) {
    observed=false;
  }
  res.setNotObserved(!observed);
  NodeList nl=residue.getElementsByTagName("String_Node_Str");
  if (nl != null && nl.getLength() > 0) {
    for (int i=0; i < nl.getLength(); i++) {
      Element crossRefEl=(Element)nl.item(i);
      String dbSource=crossRefEl.getAttribute("String_Node_Str");
      String dbCoordSys=crossRefEl.getAttribute("String_Node_Str");
      String dbAccessionId=crossRefEl.getAttribute("String_Node_Str");
      String dbResNum=crossRefEl.getAttribute("String_Node_Str");
      String dbResName=crossRefEl.getAttribute("String_Node_Str");
      String dbChainId=crossRefEl.getAttribute("String_Node_Str");
      if (dbSource.equals("String_Node_Str") && (dbCoordSys.equals("String_Node_Str"))) {
        res.setPdbResNum(dbResNum);
        res.setPdbResName(dbResName);
        res.setChainId(dbChainId);
        res.setPdbId(dbAccessionId);
      }
 else       if (dbCoordSys.equals("String_Node_Str")) {
        res.setUniProtPos(Integer.parseInt(dbResNum));
        res.setUniProtResName(dbResName);
        res.setUniProtAccessionId(dbAccessionId);
      }
    }
  }
  return res;
}

Fixed version (ground truth):
/** 
 * <residue dbResNum="1" dbResName="THR"> <crossRefDb dbSource="PDB" dbVersion="20101103" dbCoordSys="PDBresnum" dbAccessionId="1a4w" dbResNum="1H" dbResName="THR" dbChainId="L"></crossRefDb> <crossRefDb dbSource="UniProt" dbVersion="157-2" dbCoordSys="UniProt" dbAccessionId="P00734" dbResNum="328" dbResName="T"></crossRefDb> <crossRefDb dbSource="SCOP" dbVersion="1.75" dbCoordSys="PDBresnum" dbAccessionId="26083" dbResNum="1H" dbResName="THR" dbChainId="L"></crossRefDb> <residueDetail dbSource="MSD" property="Annotation"> Not_Observed</residueDetail> </residue>
 */
private SiftsResidue getResidue(Element residue){
  SiftsResidue res=new SiftsResidue();
  String dbResNumS=residue.getAttribute("String_Node_Str");
  res.setNaturalPos(Integer.parseInt(dbResNumS));
  String seqResName=residue.getAttribute("String_Node_Str");
  res.setSeqResName(seqResName);
  boolean observed=true;
  String detail=getTextValue(residue,"String_Node_Str");
  if (detail != null)   if (detail != null && detail.trim().equalsIgnoreCase("String_Node_Str")) {
    observed=false;
  }
  res.setNotObserved(!observed);
  NodeList nl=residue.getElementsByTagName("String_Node_Str");
  if (nl != null && nl.getLength() > 0) {
    for (int i=0; i < nl.getLength(); i++) {
      Element crossRefEl=(Element)nl.item(i);
      String dbSource=crossRefEl.getAttribute("String_Node_Str");
      String dbCoordSys=crossRefEl.getAttribute("String_Node_Str");
      String dbAccessionId=crossRefEl.getAttribute("String_Node_Str");
      String dbResNum=crossRefEl.getAttribute("String_Node_Str");
      String dbResName=crossRefEl.getAttribute("String_Node_Str");
      String dbChainId=crossRefEl.getAttribute("String_Node_Str");
      if (dbSource.equals("String_Node_Str") && (dbCoordSys.equals("String_Node_Str"))) {
        res.setPdbResNum(dbResNum);
        res.setPdbResName(dbResName);
        res.setChainId(dbChainId);
        res.setPdbId(dbAccessionId);
      }
 else       if (dbSource.equals("String_Node_Str")) {
        res.setUniProtPos(Integer.parseInt(dbResNum));
        res.setUniProtResName(dbResName);
        res.setUniProtAccessionId(dbAccessionId);
      }
    }
  }
  return res;
}