public void setValuesWithMappingNameMap(final Map<String, Object> map,
			final ValueVisitor defaultVisitor) {
		Class<?> clazz = getClass();
		final FieldDefinitionImpl thiz = this;
		try {
			SpringReflectionUtils.doWithFields(clazz,
					new SpringReflectionUtils.FieldCallback() {

						public void doWith(Field field)
								throws IllegalArgumentException,
								IllegalAccessException {
							if (!field
									.isAnnotationPresent(FieldDefinition.class)) {
								return;
							}
							FieldDefinition def = field
									.getAnnotation(FieldDefinition.class);
							String key = def.mappingName();
							if (map.containsKey(key)) {
								field.setAccessible(true);
								Object value = map.get(key);
								Class<?> targetClass = field.getClass();
								Map<String, Object> params = new HashMap<String, Object>(
										1);
								params.put("escape", def.escape());
								if (visitors.containsKey(targetClass)) {
									ValueVisitor visitor = visitors
											.get(targetClass);
									value = visitor.target(targetClass, value,
											params);
								} else if (defaultVisitor != null) {
									value = defaultVisitor.target(
											field.getClass(), value, params);
								}
								field.set(thiz, value);
							}
						}
					}, SpringReflectionUtils.COPYABLE_FIELDS);
		} catch (IllegalArgumentException e) {
			throw ExceptionFactory.wrapException("argument exception!", e);
		}
	}