From 59a6cbf6cafb90427b19b756a46c8b37a5f6990f Mon Sep 17 00:00:00 2001 From: JCgH4164838Gh792C124B5 <43964333+JCgH4164838Gh792C124B5@users.noreply.github.com> Date: Sat, 16 May 2020 18:44:34 -0400 Subject: [PATCH] Partial backport of L. Lenart's PR#414 to 2.5.x: - Improve Dispatcher getLocale() handling if running in AppEngine. - Implemented the same improvement to the defaultLocale logic path within getLocale(). --- .../apache/struts2/dispatcher/Dispatcher.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java index 9222c7b6a..531194391 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -696,12 +696,23 @@ public class Dispatcher { try { locale = LocaleUtils.toLocale(defaultLocale); } catch (IllegalArgumentException e) { - LOG.warn(new ParameterizedMessage("Cannot convert 'struts.locale' = [{}] to proper locale, defaulting to request locale [{}]", - defaultLocale, request.getLocale()), e); - locale = request.getLocale(); + try { + locale = request.getLocale(); + LOG.warn(new ParameterizedMessage("Cannot convert 'struts.locale' = [{}] to proper locale, defaulting to request locale [{}]", + defaultLocale, locale), e); + } catch (RuntimeException rex) { + LOG.warn(new ParameterizedMessage("Cannot convert 'struts.locale' = [{}] to proper locale, and cannot get locale from HTTP Request, falling back to system default locale", + defaultLocale), rex); + locale = Locale.getDefault(); + } } } else { - locale = request.getLocale(); + try { + locale = request.getLocale(); + } catch (RuntimeException rex) { + LOG.warn("Cannot get locale from HTTP Request, falling back to system default locale", rex); + locale = Locale.getDefault(); + } } return locale; }