Program: 104869
Project: 104869
Buggy source:
/** 
 * Validate the path, and value type, returning the mappedfield for the field at the path 
 */
private MappedField validate(String prop,Object value){
  String[] parts=prop.split("String_Node_Str");
  if (this.clazz == null)   return null;
  MappedClass mc=ds.getMapper().getMappedClass(this.clazz);
  MappedField mf;
  for (int i=0; ; ) {
    String part=parts[i];
    mf=mc.getMappedField(part);
    if (mf == null) {
      mf=mc.getMappedFieldByJavaField(part);
      if (mf != null)       throw new MappingException("String_Node_Str" + part + "String_Node_Str"+ mf.getNameToStore()+ "String_Node_Str"+ this.clazz.getName()+ "String_Node_Str"+ "String_Node_Str"+ prop+ "String_Node_Str"+ mf.getNameToStore()+ "String_Node_Str");
 else       throw new MappingException("String_Node_Str" + part + "String_Node_Str"+ this.clazz.getName()+ "String_Node_Str"+ prop);
    }
    i++;
    if (mf.isMap()) {
      i++;
    }
    if (i >= parts.length)     break;
    mc=ds.getMapper().getMappedClass((mf.isSingleValue()) ? mf.getType() : mf.getSubType());
  }
  if ((mf.isSingleValue() && !isCompatibleForQuery(mf.getType(),value)) || ((mf.isMultipleValues() && !isCompatibleForQuery(mf.getSubType(),value)))) {
    Throwable t=new Throwable();
    log.warning("String_Node_Str" + value.getClass().getName() + "String_Node_Str"+ mf.getDeclaringClass().getName()+ "String_Node_Str"+ mf.getJavaFieldName()+ "String_Node_Str"+ mf.getType().getName());
    log.debug("String_Node_Str",t);
  }
  return mf;
}

Fixed version (ground truth):
/** 
 * Validate the path, and value type, returning the mappedfield for the field at the path 
 */
private MappedField validate(String prop,Object value){
  String[] parts=prop.split("String_Node_Str");
  if (this.clazz == null)   return null;
  MappedClass mc=ds.getMapper().getMappedClass(this.clazz);
  MappedField mf;
  for (int i=0; ; ) {
    String part=parts[i];
    mf=mc.getMappedField(part);
    if (mf == null) {
      mf=mc.getMappedFieldByJavaField(part);
      if (mf != null)       throw new MappingException("String_Node_Str" + part + "String_Node_Str"+ mf.getNameToStore()+ "String_Node_Str"+ this.clazz.getName()+ "String_Node_Str"+ "String_Node_Str"+ prop+ "String_Node_Str"+ mf.getNameToStore()+ "String_Node_Str");
 else       throw new MappingException("String_Node_Str" + part + "String_Node_Str"+ this.clazz.getName()+ "String_Node_Str"+ prop);
    }
    i++;
    if (mf.isMap()) {
      i++;
    }
    if (i < parts.length && !canQueryPast(mf))     throw new MappingException("String_Node_Str" + part + "String_Node_Str"+ this.clazz.getName()+ "String_Node_Str"+ prop);
    if (i >= parts.length)     break;
    mc=ds.getMapper().getMappedClass((mf.isSingleValue()) ? mf.getType() : mf.getSubType());
  }
  if ((mf.isSingleValue() && !isCompatibleForQuery(mf.getType(),value)) || ((mf.isMultipleValues() && !isCompatibleForQuery(mf.getSubType(),value)))) {
    Throwable t=new Throwable();
    log.warning("String_Node_Str" + value.getClass().getName() + "String_Node_Str"+ mf.getDeclaringClass().getName()+ "String_Node_Str"+ mf.getJavaFieldName()+ "String_Node_Str"+ mf.getType().getName());
    log.debug("String_Node_Str",t);
  }
  return mf;
}