public Map<String, String> map(final ValueVisitor visitor) {
		final Map<String, String> map = new HashMap<String, String>();
		final Attribute thiz = this;
		Class<?> clazz = getClass();
		try {
			SpringReflectionUtils.doWithFields(clazz,
					new SpringReflectionUtils.FieldCallback() {
						public void doWith(Field field)
								throws IllegalArgumentException,
								IllegalAccessException {
							field.setAccessible(true);
							Object obj = field.get(thiz);
							String value = visitor.target(String.class, obj,
									null).toString();
							map.put(field.getName(), value);
						}
					}, SpringReflectionUtils.COPYABLE_FIELDS);
		} catch (IllegalArgumentException e) {
			throw ExceptionFactory.wrapException("argument exception!", e);
		}

		return map;
	}