Invokes an object method by its name with specified parameters.

        :param obj: an object to invoke.

        :param name: a name of the method to invoke.

        :param args: a list of method arguments.

        :return: the result of the method invocation or null if method returns void.

def invoke_method(obj, name, *args):
        """
        Invokes an object method by its name with specified parameters.

        :param obj: an object to invoke.

        :param name: a name of the method to invoke.

        :param args: a list of method arguments.

        :return: the result of the method invocation or null if method returns void.
        """
        if obj == None:
            raise Exception("Object cannot be null")
        if name == None:
            raise Exception("Method name cannot be null")
        
        name = name.lower()
        
        try:
            for method_name in dir(obj): 
                if method_name.lower() != name:
                    continue

                method = getattr(obj, method_name)

                if MethodReflector._is_method(method, method_name):
                    return method(*args)
        except:
            pass
        
        return None