@Override
    public void setPropertyValue(Object bean, Object value, FieldMap fieldMap) {
        if (MappingUtils.isDeepMapping(fieldName)) {
            writeDeepDestinationValue(bean, value, fieldMap);
        } else {
            if (!getPropertyType().isPrimitive() || value != null) {
                // Check if dest value is already set and is equal to src value. If true, no need to rewrite the dest value
                try {
                    // We should map null values to create a new key in the map
                    if (value != null && getPropertyValue(bean) == value) {
                        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 Map backed objects that use key/value pairs. The specified "key" is
used when invoking getter/setter. It is assumed that Map setter method has two parameters (for "key" and "value"),
but getter method one parameter (for "key").
<p>
Overloaded methods are supported. Map class can have two set methods with different signatures, but class will
choose the one with appropriate number of parameters.
<p>
Only intended for internal use.
core/src/main/java/com/github/dozermapper/core/propertydescriptor/MapPropertyDescriptor.java