'Call the corresponding responder on the configured locator.
@param commandType: a subclass of L{AMP_MODULE.Command}.
@param kwargs: Keyword arguments taken by the command, a C{dict}.
@return: A C{Deferred} that fires with the result of the responder.'

def callRemote(self, command, **kwargs):

    argument_box = command.makeArguments(kwargs, self._locator)
    wire_format = argument_box.serialize()
    [decoded_argument_box] = parseString(wire_format)
    responder = self._locator.locateResponder(command.commandName)
    d = responder(decoded_argument_box)
    def serialize_response(response_box):
        wire_format = response_box.serialize()
        [decoded_response_box] = parseString(wire_format)
        return decoded_response_box
    d.addCallback(serialize_response)
    d.addCallback(command.parseResponse, self._locator)
    def massage_error(error):
        if error.check(RemoteAmpError):
            rje = error.value
            errorType = command.reverseErrors.get(rje.errorCode, UnknownRemoteError)
            return Failure(errorType(rje.description))
        return Failure(ConnectionLost(str(error)))
    d.addErrback(massage_error)
    return d
