code: public Object invoke(RpcRequest req, Object handler)
          throws RpcException, IllegalAccessException, InvocationTargetException {
          if (contract == null) {
              throw new IllegalStateException("contract cannot be null");
          }
          if (req == null) {
              throw new IllegalArgumentException("req cannot be null");
          }
          if (handler == null) {
              throw new IllegalArgumentException("handler cannot be null");
          }
  
          Method method      = getMethod(handler);
          Object reqParams[] = unmarshalParams(req, method);
  
          return marshalResult(method.invoke(handler, reqParams));
      }
docs: Invokes this Function against the given handler Class for the given request.
  This is the heart of the RPC dispatch, and is where your application code gets run.
  
  @param req Request to invoke against handler. The req.params will be unmarshaled and
  used when calling the Java method on handler.
  @param handler Your application class that implements the given interface.  The method
  on handler that matches this Function's name will be invoked.
  @return Result of Java method invocation, marshaled to its RPC result type
  @throws RpcException If the req.params do not match the parameters for this function as
  specified in the IDL
  @throws IllegalAccessException If there is a problem invoking the method on handler
  @throws InvocationTargetException If there is a problem invoking the method on handler