def terminalError(self, event):
        t = event.getThrowable()
        if isinstance(t, IOError):  #SocketException
            # Most likely client browser closed socket
            logger.exception('SocketException in CommunicationManager.' \
                              ' Most likely client (browser) closed socket.')
            return

        # Finds the original source of the error/exception
        owner = None
        if isinstance(event, VariableOwnerErrorEvent):
            owner = event.getVariableOwner()
        elif isinstance(event, URIHandlerErrorEvent):
            owner = event.getURIHandler()
        elif isinstance(event, ParameterHandlerErrorEvent):
            owner = event.getParameterHandler()
        elif isinstance(event, ChangeVariablesErrorEvent):
            owner = event.getComponent()

        # Shows the error in AbstractComponent
        if isinstance(owner, AbstractComponent):
            if isinstance(t, IErrorMessage):
                owner.setComponentError(t)
            else:
                owner.setComponentError( SysError(t) )

        # also print the error on console
        logger.exception('ITerminal error: ' + str(t))

        exc_type, _, exc_traceback = sys.exc_info()
        traceback.print_exception(exc_type, t,
                exc_traceback, file=sys.stdout)
Returns one of the classifiers 'dav', 'xmlpost', or 'browser',
dataset/ETHPy150Open rwl/muntjac/muntjac/application.py/Application.terminalError--crossover with--dataset/ETHPy150Open cloudera/hue/desktop/core/ext-py/pysaml2-2.4.0/src/s2repoze/plugins/challenge_decider.py/my_request_classifier