@Override
    public FieldValue setFieldValue(String fieldName, FieldValue fieldValue) {
        SetHandler handler = new SetHandler(fieldValue);
        FieldPath path = getFieldPath(fieldName);
        iterateNested(path, 0, handler);
        if (!handler.doModifyCalled) {
            //the value in question was not found
            throw new IllegalArgumentException("Field '" + fieldName + "' mapped by '" + path + "' was not found.");
        }
        return handler.prevVal;
    }
note that the returned Field may not be in this Document
directly, but may refer to a field in a struct contained in it,
in which case the returned Field is only useful for obtaining
the field type; it can't be used for get() and set().
docproc/src/main/java/com/yahoo/docproc/proxy/ProxyDocument.java