code: @Override
      public Object invoke(Object controller, String action) throws Throwable {
          if(action == null) action = this.defaultActionName;
          ActionInvoker handle = actions.get(action);
          if(handle == null) throw new IllegalArgumentException("Invalid action name: " + action);
          return handle.invoke(controller);
      }
docs: Invokes the controller action for the given name on the given controller instance
  
  @param controller The controller instance
  @param action The action name
  @return The result of the action
  @throws Throwable