def _call(self, context):
        req = context.request
        if not req.has_key("method"):
            raise RpcException(ERR_INVALID_REQ, "Invalid Request. No 'method'.")
        method = req["method"]
        if method == "barrister-idl":
            return self.contract.idl_parsed
        iface_name, func_name = unpack_method(method)
        if self.handlers.has_key(iface_name):
            iface_impl = self.handlers[iface_name]
            func = getattr(iface_impl, func_name)
            if func:
                if req.has_key("params"):
                    params = req["params"]
                else:
                    params = [ ]
                if self.validate_req:
                    self.contract.validate_request(iface_name, func_name, params)
                if hasattr(iface_impl, "barrister_pre"):
                    pre_hook = getattr(iface_impl, "barrister_pre")
                    pre_hook(context, params)
                if params:
                    result = func(*params)
                else:
                    result = func()
                if self.validate_resp:
                    self.contract.validate_response(iface_name, func_name, result)
                return result
            else:
                msg = "Method '%s' not found" % (method)
                raise RpcException(ERR_METHOD_NOT_FOUND, msg)
        else:
            msg = "No implementation of '%s' found" % (iface_name)
            raise RpcException(ERR_METHOD_NOT_FOUND, msg)