def call(self, req, props=None):
        """
        Executes a Barrister request and returns a response.  If the request is a list, then the
        response will also be a list.  If the request is an empty list, a RpcException is raised.

        :Parameters:
          req
            The request. Either a list of dicts, or a single dict.
          props
            Application defined properties to set on RequestContext for use with filters. 
            For example: authentication headers.  Must be a dict.
        """
        resp = None

        if self.log.isEnabledFor(logging.DEBUG):
            self.log.debug("Request: %s" % str(req))

        if isinstance(req, list):
            if len(req) < 1:
                resp = err_response(None, ERR_INVALID_REQ, "Invalid Request. Empty batch.")
            else:
                resp = [ ]
                for r in req:
                    resp.append(self._call_and_format(r, props))
        else:
            resp = self._call_and_format(req, props)

        if self.log.isEnabledFor(logging.DEBUG):
            self.log.debug("Response: %s" % str(resp))
        return resp
Executes a Barrister request and returns a response.  If the request is a list, then the
        response will also be a list.  If the request is an empty list, a RpcException is raised.

        :Parameters:
          req
            The request. Either a list of dicts, or a single dict.
          props
            Application defined properties to set on RequestContext for use with filters. 
            For example: authentication headers.  Must be a dict.