public void setPropertyValue(Object bean, Object value, FieldMap fieldMap) {
        if (MappingUtils.isDeepMapping(fieldName)) {
            writeDeepDestinationValue(bean, value, fieldMap);
        } else {
            if (!getPropertyType().isPrimitive() || value != null) {
                //First check if value is indexed. If it's null, then the new array will be created
                if (isIndexed) {
                    writeIndexedValue(bean, value);
                } else {
                    // Check if dest value is already set and is equal to src value. If true, no need to rewrite the dest value
                    try {
                        if (getPropertyValue(bean) == value && !isIndexed) {
                            return;
                        }
                    } catch (Exception e) {
                        // if we failed to read the value, assume we must write, and continue...
                    }
                    invokeWriteMethod(bean, value);
                }
            }
        }
    }
Internal class used to read and write values for fields that have a getter and setter method. This class encapsulates
underlying dozer specific logic such as index mapping and deep mapping for reading and writing field values. Only
intended for internal use.
core/src/main/java/com/github/dozermapper/core/propertydescriptor/GetterSetterPropertyDescriptor.java