code: public void set(Object obj, Object value) throws IllegalAccessException, InvocationTargetException {
          // always try the "setMethod" first
          if (setMethod != null) {
              setMethod.invoke(obj, value);
          // fall back to setting the field directly
          } else if (field != null) {
              field.set(obj, value);
          } else {
              throw new IllegalAccessException("Cannot set property value");
          }
      }
docs: Sets the property value on the object.  Attempts to first set the
  property via its setter method such as "setFirstName()".  If a setter
  method doesn't exist, this will then attempt to set the property value
  directly on the underlying field within the class.
  <br>
  NOTE: If the setter method throws an exception during execution, the
  exception will be accessible in the getCause() method of the
  InvocationTargetException.
  @param obj The object to set the property on
  @param value The value of the property
  @throws java.lang.IllegalAccessException Thrown if an access exception
  occurs while attempting to set the property value.
  @throws java.lang.reflect.InvocationTargetException Thrown if there
  is an exception thrown while calling the underlying method.