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