@Override public ModelAndView resolveException( HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) { if (request.getRequestURI().endsWith(".ajax")) { return ajaxFailure(request, response, exception); } else { response.setStatus(HttpServletResponse.SC_BAD_REQUEST); QueryProblem queryProblem = QueryProblem.NONE; if (exception instanceof EuropeanaQueryException) { queryProblem = ((EuropeanaQueryException) exception).getFetchProblem(); } Boolean debugMode = Boolean.valueOf(debug); String stackTrace = getStackTrace(exception); if (queryProblem == QueryProblem.NONE || queryProblem == QueryProblem.SOLR_UNREACHABLE) { if (!debugMode) { // don't send email in debugMode emailSender .create("exception") .setFrom(fromEmail) .setTo(toEmail) .setSubject(queryProblem.getFragment()) .set("hostName", request.getServerName()) .set("request", ControllerUtil.formatFullRequestUrl(request)) .set("stackTrace", stackTrace) .set("cacheUrl", cacheUrl) .set("portalName", portalName) .set("portalTheme", portalTheme) .set("portalColor", portalColor) .set("portalDisplayName", portalDisplayName) .set("agent", request.getHeader("User-Agent")) .set("referer", request.getHeader("referer")) .send(); } else { log.error(stackTrace); } } String errorMessage = MessageFormat.format("errorMessage={0}", queryProblem.toString()); clickStreamLogger.logCustomUserAction( request, ClickStreamLogger.UserAction.EXCEPTION_CAUGHT, errorMessage); ModelAndView mav = new ModelAndView("exception"); mav.addObject("debug", debugMode); mav.addObject("interfaceLanguage", ControllerUtil.getLocale(request)); mav.addObject("cacheUrl", cacheUrl); mav.addObject("portalName", portalName); mav.addObject("portalTheme", portalTheme); mav.addObject("portalColor", portalColor); mav.addObject("portalDisplayName", portalDisplayName); mav.addObject("queryProblem", queryProblem); mav.addObject("exception", exception); mav.addObject("stackTrace", stackTrace); mav.addObject("includedMacros", includedMacros); return mav; } }
@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws ServletException, EuropeanaQueryException { Language oldLocale = ControllerUtil.getLocale(request); String newLocale = request.getParameter(this.paramName); if (newLocale != null) { if (newLocale.contains("*")) { throw new EuropeanaQueryException(QueryProblem.UNABLE_TO_CHANGE_LANGUAGE.toString()); } LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request); if (localeResolver == null) { throw new IllegalStateException( "No LocaleResolver found: not in a DispatcherServlet request?"); } LocaleEditor localeEditor = new LocaleEditor(); localeEditor.setAsText(newLocale); localeResolver.setLocale(request, response, (Locale) localeEditor.getValue()); clickStreamLogger.logLanguageChange( request, oldLocale, ClickStreamLogger.UserAction.LANGUAGE_CHANGE); } // Proceed in any case. return true; }