code: @Override
  	public Object fetch(IParamReader reader, IParamData param) {
  		Class<?> beanClass = null;
  		BeanInfo beanInfo = null;
  		Object beanInstance = null;
  		try {
  			ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  			beanClass = Class.forName(param.getType(), true, classLoader);
  			beanInfo = Introspector.getBeanInfo(beanClass);
  			beanInstance = beanClass.newInstance();
  
  			PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
  			for(BeanProperty beanProperty : properties) {
  				// Odczytujemy klucz, nazwę i wartość domyślną parametru:
  				String propertyName = beanProperty.getPropertyName();
  				String attributeName = beanProperty.getAttribute("name");
  				String attributeValue = beanProperty.getAttribute("value");
  
  				String propertyValue = reader.getParamValue(param.getKey() + "." + propertyName, attributeName, attributeValue);
  
  				// TODO: W oparciu o dodatkowe atrybuty przeprowadzamy walidację wartości:
  
  				// Po walidacji wartości wyszukujemy i wywołujemy setter'a:
  				Method writeMethod = null;
  				for(PropertyDescriptor propertyDescriptor : propertyDescriptors) {
  					if(propertyDescriptor.getName().equals(propertyName)) {
  						writeMethod = propertyDescriptor.getWriteMethod();
  						break;
  					}
  				}
  				if(writeMethod == null) {
  					throw new RuntimeException("No public setter found for property '" + propertyName + "' "
  							+ "in bean class " + beanClass.getCanonicalName());
  				}
  				writeMethod.invoke(beanInstance, propertyValue);
  			}
  		} catch(Exception e) {
  			throw new RuntimeException(e);
  		}
  		return beanInstance;
  	}
docs: --------------------------------------------------------------------------