for (Field fld : scheme.getDeclaredFields()) {
Property propertyDesc = fld.getAnnotation(Property.class);
if (propertyDesc == null) continue;
Class<?> type = fld.getType();
TypeConverter converter = TypeConverters.lookupStringToTypeConverter(type);
String key = !propertyDesc.value().isEmpty() ? propertyDesc.value() : fld.getName();
if (properties.get(key) == null) continue;
Object src = properties.get(key);
fld.set(container, converter.convert(src));
}
return container;
} catch (InstantiationException e) {
throw new RuntimeException(e);