@Override public ModelAndView getResponse(String flowSessionId, String phoneNumber, String provider, String tree, String transitionKey, String language) { FlowSession session = flowSessionService.findOrCreate(flowSessionId, phoneNumber); if (language != null) { session.setLanguage(language); } ModelAndView view; try { view = getModelViewForNextNode(session, provider, tree, transitionKey); } catch (DecisionTreeException e) { logger.error(e.getMessage(), e); view = getErrorModelAndView(e.subject, session, provider); } catch (Exception e) { logger.error(format("Unexpected exception %s", e.getMessage()), e); view = getErrorModelAndView(Error.UNEXPECTED_EXCEPTION, session, provider); } return view; }