public Object getValue(Object instance) throws InvocationTargetException {
	if (parent != null) {
	    instance = parent.getValue(instance);
	}
	if (instance.getClass().isArray()) {
	    instance = asList((Object[]) instance);
	}
	if (instance instanceof Collection<?>) {
	    LinkedList<Object> result = new LinkedList<Object>();
	    for (Object o : (Collection<?>) instance) {
		if (o != null) {
		    try {
			result.add(propertyDescriptor.getReadMethod().invoke(o));
		    } catch (IllegalAccessException e) {
			throw new RuntimeException(e);// never happens
		    }
		}
	    }
	    return result;
	} else {
	    try {
		return propertyDescriptor.getReadMethod().invoke(instance);
	    } catch (IllegalAccessException e) {
		throw new RuntimeException(e);// never happens
	    }
	}
    }