code: @SuppressWarnings("unchecked")
  	public static void setProperty(Object obj, String name, Object value) {
  		if (obj == null)
  			throw new NullPointerException("Object cannot be null");
  		if (name == null)
  			throw new NullPointerException("Property name cannot be null");
  
  		if (obj instanceof Map<?, ?>) {
  			Map<Object, Object> mapObj = (Map<Object, Object>) obj;
  			for (Object key : mapObj.keySet()) {
  				if (name.equalsIgnoreCase(key.toString())) {
  					mapObj.put(key, value);
  					return;
  				}
  			}
  			mapObj.put(name, value);
  		} else if (obj instanceof List<?>) {
  			List<Object> list = (List<Object>) obj;
  			int index = IntegerConverter.toIntegerWithDefault(name, -1);
  			if (index < 0)
  				return;
  			else if (index < list.size())
  				list.set(index, value);
  			else {
  				while (index - 1 >= list.size())
  					list.add(null);
  				list.add(value);
  			}
  		} else if (obj.getClass().isArray()) {
  			int length = Array.getLength(obj);
  			int index = IntegerConverter.toIntegerWithDefault(name, -1);
  			if (index >= 0 && index < length)
  				Array.set(obj, index, value);
  		} else {
  			PropertyReflector.setProperty(obj, name, value);
  		}
  	}
docs: Sets value of object property specified by its name.
  
  The object can be a user defined object, map or array. The property name
  correspondently must be object property, map key or array index.
  
  If the property does not exist or introspection fails this method doesn't do
  anything and doesn't any throw errors.
  
  @param obj   an object to write property to.
  @param name  a name of the property to set.
  @param value a new value for the property to set.