'WSGI method that controls (de)serialization and method dispatch.'

@webob.dec.wsgify(RequestClass=Request)
def __call__(self, request):

    if self.support_api_request_version:
        try:
            request.set_api_version_request()
        except exception.InvalidAPIVersionString as e:
            return Fault(webob.exc.HTTPBadRequest(explanation=e.format_message()))
        except exception.InvalidGlobalAPIVersion as e:
            return Fault(webob.exc.HTTPNotAcceptable(explanation=e.format_message()))
    action_args = self.get_action_args(request.environ)
    action = action_args.pop('action', None)
    try:
        (content_type, body) = self.get_body(request)
        accept = request.best_match_content_type()
    except exception.InvalidContentType:
        msg = _('Unsupported    Content-Type')
        return Fault(webob.exc.HTTPUnsupportedMediaType(explanation=msg))
    return self._process_stack(request, action, action_args, content_type, body, accept)
