private Object getDeepSrcFieldValue(Object srcObj) {
        // follow deep field hierarchy. If any values are null along the way, then return null
        Object parentObj = srcObj;
        Object hierarchyValue = parentObj;
        DeepHierarchyElement[] hierarchy = getDeepFieldHierarchy(srcObj, srcDeepIndexHintContainer);
        int size = hierarchy.length;
        for (int i = 0; i < size; i++) {
            DeepHierarchyElement hierarchyElement = hierarchy[i];
            PropertyDescriptor pd = hierarchyElement.getPropDescriptor();
            // If any fields in the deep hierarchy are indexed, get actual value within the collection at the specified index
            if (hierarchyElement.getIndex() > -1) {
                hierarchyValue = MappingUtils.getIndexedValue(ReflectionUtils.invoke(pd.getReadMethod(), hierarchyValue, null),
                                                              hierarchyElement.getIndex());
            } else {
                hierarchyValue = ReflectionUtils.invoke(pd.getReadMethod(), parentObj, null);
            }
            parentObj = hierarchyValue;
            if (hierarchyValue == null) {
                break;
            }
        }

        // If dest field is indexed, get actual value within the collection at the specified index
        if (isIndexed) {
            hierarchyValue = MappingUtils.getIndexedValue(hierarchyValue, index);
        }

        return hierarchyValue;
    }
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