Program: 37394
Project: 37394
Buggy source:
/** 
 * get the baseModel property value.
 * @param objModel model of object.
 */
@Override public void applyPolicy(final Object objModel){
  LOGGER.info("String_Node_Str" + objModel);
  if (objModel == null) {
    return;
  }
  Map<String,Set<String>> mapObjFields=loadPolicyFieldsByMap();
  if (null == mapObjFields) {
    return;
  }
  String strObjType=null;
  if (objModel.getClass().getSuperclass() == BaseModel.class || objModel.getClass().getSuperclass() == BaseSearchModel.class) {
    strObjType=getModelString(objModel);
  }
  if (strObjType == null) {
    return;
  }
  Set<String> setFields=mapObjFields.get(strObjType);
  Method[] allMethods=ReflectionUtils.getUniqueDeclaredMethods(objModel.getClass());
  for (  Method mthd : allMethods) {
    String strMethod=mthd.getName();
    String strMethodField=trucateStringFromMethod(strMethod);
    if (strMethodField == null) {
      continue;
    }
    Object value=null;
    final String strSetFirstWord="String_Node_Str";
    boolean isSetMethod=strMethod.startsWith(strSetFirstWord);
    boolean isGetMethod=strMethod.startsWith("String_Node_Str");
    String strIsBool=mthd.getReturnType().toString();
    if (!strIsBool.contains("String_Node_Str") && isGetMethod) {
      value=getPropertyValue(objModel,strMethodField);
    }
    if (setFields != null) {
      Iterator<String> iter=setFields.iterator();
      while (iter.hasNext()) {
        String strField=iter.next();
        if (strMethodField.equalsIgnoreCase(strField) && isSetMethod) {
          setPropertyNull(objModel,strMethodField);
          break;
        }
      }
    }
    if (value == null) {
      continue;
    }
    if (mthd.getReturnType() == List.class) {
      setInnerListPolicy(value);
    }
 else {
      applyPolicy(value);
    }
  }
  return;
}

Fixed version (ground truth):
/** 
 * get the baseModel property value.
 * @param objModel model of object.
 */
@Override public void applyPolicy(final Object objModel){
  if (objModel == null) {
    return;
  }
  Map<String,Set<String>> mapObjFields=loadPolicyFieldsByMap();
  if (null == mapObjFields) {
    return;
  }
  String strObjType=null;
  if (objModel.getClass().getSuperclass() == BaseModel.class || objModel.getClass().getSuperclass() == BaseSearchModel.class) {
    strObjType=getModelString(objModel);
  }
  if (strObjType == null) {
    return;
  }
  Set<String> setFields=mapObjFields.get(strObjType);
  Method[] allMethods=ReflectionUtils.getUniqueDeclaredMethods(objModel.getClass());
  for (  Method mthd : allMethods) {
    String strMethod=mthd.getName();
    String strMethodField=trucateStringFromMethod(strMethod);
    if (strMethodField == null) {
      continue;
    }
    Object value=null;
    final String strSetFirstWord="String_Node_Str";
    boolean isSetMethod=strMethod.startsWith(strSetFirstWord);
    boolean isGetMethod=strMethod.startsWith("String_Node_Str");
    String strIsBool=mthd.getReturnType().toString();
    if (!strIsBool.contains("String_Node_Str") && isGetMethod) {
      value=getPropertyValue(objModel,strMethodField);
    }
    if (setFields != null) {
      Iterator<String> iter=setFields.iterator();
      while (iter.hasNext()) {
        String strField=iter.next();
        if (strMethodField.equalsIgnoreCase(strField) && isSetMethod) {
          setPropertyNull(objModel,strMethodField);
          break;
        }
      }
    }
    if (value == null) {
      continue;
    }
    if (mthd.getReturnType() == List.class) {
      setInnerListPolicy(value);
    }
 else {
      applyPolicy(value);
    }
  }
  return;
}