private void mapFromIterateMethodFieldMap(Object srcObj, Object destObj, Object srcFieldValue, FieldMap fieldMapping) {
if (srcFieldValue instanceof Iterator) {
srcFieldValue = IteratorUtils.toList((Iterator<?>) srcFieldValue);
}
if (srcFieldValue != null) {
for (int i = 0; i < CollectionUtils.getLengthOfCollection(srcFieldValue); i++) {
final Object value = CollectionUtils.getValueFromCollection(srcFieldValue, i);
if (fieldMapping.getDestHintContainer() == null) {
MappingUtils.throwMappingException("<field type=\"iterate\"> must have a source or destination type hint");
}
Class<?> destinationHint = fieldMapping.getDestHintType(value.getClass());
Object result = mapOrRecurseObject(srcObj, value, destinationHint, fieldMapping, destObj);
if (value != null) {
writeDestinationValue(destObj, result, fieldMapping, srcObj);
}
}
}
if (log.isDebugEnabled()) {
log.debug(logMsgFactory.createFieldMappingSuccessMsg(srcObj.getClass(), destObj.getClass(), fieldMapping.getSrcFieldName(),
fieldMapping.getDestFieldName(), srcFieldValue, null, fieldMapping.getClassMap().getMapId()));
}
}