You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by lu...@apache.org on 2017/04/26 08:38:41 UTC

struts git commit: WW-4791 Stops using DefaultLocalizedTextProvider#localeFromString

Repository: struts
Updated Branches:
  refs/heads/master 8f75e1a19 -> f06caf7ca


WW-4791 Stops using DefaultLocalizedTextProvider#localeFromString


Project: http://git-wip-us.apache.org/repos/asf/struts/repo
Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/f06caf7c
Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/f06caf7c
Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/f06caf7c

Branch: refs/heads/master
Commit: f06caf7ca7fc38c5c834e129ac18a483ef37c58d
Parents: 8f75e1a
Author: Lukasz Lenart <lu...@apache.org>
Authored: Wed Apr 26 10:38:32 2017 +0200
Committer: Lukasz Lenart <lu...@apache.org>
Committed: Wed Apr 26 10:38:32 2017 +0200

----------------------------------------------------------------------
 .../xwork2/DefaultLocaleProvider.java           | 11 +++++--
 .../util/DefaultLocalizedTextProvider.java      |  3 ++
 .../apache/struts2/dispatcher/Dispatcher.java   | 32 ++++++++++++--------
 .../struts2/interceptor/I18nInterceptor.java    |  6 ++--
 .../PropertiesConfigurationProviderTest.java    | 10 +++---
 .../struts2/dispatcher/DispatcherTest.java      |  1 -
 .../interceptor/I18nInterceptorTest.java        | 13 +-------
 .../portlet/dispatcher/Jsr168Dispatcher.java    | 29 ++++++++++++------
 8 files changed, 61 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java b/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java
index 7fbc2bc..bdb6d7c 100644
--- a/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/DefaultLocaleProvider.java
@@ -15,9 +15,10 @@
  */
 package com.opensymphony.xwork2;
 
-import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.message.ParameterizedMessage;
 
 import java.util.Arrays;
 import java.util.Locale;
@@ -42,7 +43,13 @@ public class DefaultLocaleProvider implements LocaleProvider {
 
     @Override
     public boolean isValidLocaleString(String localeStr) {
-        return isValidLocale(DefaultLocalizedTextProvider.localeFromString(localeStr, getLocale()));
+        Locale locale = null;
+        try {
+            locale = LocaleUtils.toLocale(localeStr);
+        } catch (IllegalArgumentException e) {
+            LOG.warn(new ParameterizedMessage("Cannot convert [{}] to proper locale", localeStr, e));
+        }
+        return isValidLocale(locale);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java b/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java
index b7d5314..61a8317 100644
--- a/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java
+++ b/core/src/main/java/com/opensymphony/xwork2/util/DefaultLocalizedTextProvider.java
@@ -152,7 +152,10 @@ public class DefaultLocalizedTextProvider implements LocalizedTextProvider {
      * @param localeStr     The locale String to parse.
      * @param defaultLocale The locale to use if localeStr is <tt>null</tt>.
      * @return requested Locale
+     *
+     * @deprecated please use {@link org.apache.commons.lang3.LocaleUtils#toLocale(String)}
      */
+    @Deprecated
     public static Locale localeFromString(String localeStr, Locale defaultLocale) {
         if ((localeStr == null) || (localeStr.trim().length() == 0) || ("_".equals(localeStr))) {
             if (defaultLocale != null) {

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
----------------------------------------------------------------------
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 3645241..667f37d 100644
--- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
+++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java
@@ -39,10 +39,12 @@ import com.opensymphony.xwork2.util.location.LocatableProperties;
 import com.opensymphony.xwork2.util.location.Location;
 import com.opensymphony.xwork2.util.location.LocationUtils;
 import com.opensymphony.xwork2.util.profiling.UtilTimerStack;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
+import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.struts2.ServletActionContext;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsException;
@@ -672,14 +674,7 @@ public class Dispatcher {
         extraContext.put(ActionContext.SESSION, sessionMap);
         extraContext.put(ActionContext.APPLICATION, applicationMap);
 
-        Locale locale;
-        if (defaultLocale != null) {
-            locale = DefaultLocalizedTextProvider.localeFromString(defaultLocale, request.getLocale());
-        } else {
-            locale = request.getLocale();
-        }
-
-        extraContext.put(ActionContext.LOCALE, locale);
+        extraContext.put(ActionContext.LOCALE, getLocale(request));
 
         extraContext.put(StrutsStatics.HTTP_REQUEST, request);
         extraContext.put(StrutsStatics.HTTP_RESPONSE, response);
@@ -697,6 +692,22 @@ public class Dispatcher {
         return extraContext;
     }
 
+    protected Locale getLocale(HttpServletRequest request) {
+        Locale locale;
+        if (defaultLocale != null) {
+            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();
+            }
+        } else {
+            locale = request.getLocale();
+        }
+        return locale;
+    }
+
     /**
      * Return the path to save uploaded files to (this is configurable).
      *
@@ -754,10 +765,7 @@ public class Dispatcher {
             encoding = "UTF-8";
         }
 
-        Locale locale = null;
-        if (defaultLocale != null) {
-            locale = DefaultLocalizedTextProvider.localeFromString(defaultLocale, request.getLocale());
-        }
+        Locale locale = getLocale(request);
 
         if (encoding != null) {
             applyEncoding(request, encoding);

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
index 722beb0..61a158c 100644
--- a/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
+++ b/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java
@@ -25,7 +25,7 @@ import com.opensymphony.xwork2.LocaleProvider;
 import com.opensymphony.xwork2.LocaleProviderFactory;
 import com.opensymphony.xwork2.inject.Inject;
 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
-import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider;
+import org.apache.commons.lang.LocaleUtils;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.message.ParameterizedMessage;
@@ -166,7 +166,9 @@ public class I18nInterceptor extends AbstractInterceptor {
             } else {
                 String localeStr = requestedLocale.toString();
                 if (localeProvider.isValidLocaleString(localeStr)) {
-                    locale = DefaultLocalizedTextProvider.localeFromString(requestedLocale.toString(), null);
+                    locale = LocaleUtils.toLocale(localeStr);
+                } else {
+                    locale = localeProvider.getLocale();
                 }
             }
             if (locale != null) {

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java b/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java
index 05606ce..b4fd408 100644
--- a/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java
+++ b/core/src/test/java/org/apache/struts2/config/PropertiesConfigurationProviderTest.java
@@ -26,6 +26,7 @@ import com.opensymphony.xwork2.inject.ContainerBuilder;
 import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider;
 import com.opensymphony.xwork2.util.location.LocatableProperties;
 import junit.framework.TestCase;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.struts2.StrutsConstants;
 
 import java.util.Locale;
@@ -41,7 +42,7 @@ public class PropertiesConfigurationProviderTest extends TestCase {
 
         ContainerBuilder builder = new ContainerBuilder();
         builder.constant("foo", "bar");
-        builder.constant("struts.locale", "DE_de");
+        builder.constant("struts.locale", "de_DE");
 
         PropertiesConfigurationProvider prov = new PropertiesConfigurationProvider();
         prov.register(builder, new LocatableProperties());
@@ -49,7 +50,7 @@ public class PropertiesConfigurationProviderTest extends TestCase {
         Container container = builder.create(true);
 
         String localeStr = container.getInstance(String.class, StrutsConstants.STRUTS_LOCALE);
-        Locale locale = DefaultLocalizedTextProvider.localeFromString(localeStr, Locale.FRANCE);
+        Locale locale = LocaleUtils.toLocale(localeStr);
 
         assertNotNull(locale);
         assertEquals("DE", locale.getCountry());
@@ -68,11 +69,8 @@ public class PropertiesConfigurationProviderTest extends TestCase {
         Container container = builder.create(true);
 
         String localeStr = container.getInstance(String.class, StrutsConstants.STRUTS_LOCALE);
-        Locale locale = DefaultLocalizedTextProvider.localeFromString(localeStr, Locale.getDefault());
 
-        assertNotNull(locale);
-        Locale vmLocale = Locale.getDefault();
-        assertEquals(locale, vmLocale);
+        assertNull(localeStr);
     }
 
     public void testDefaultSettings() throws Exception {

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
index 8001bd2..0f430de 100644
--- a/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
+++ b/core/src/test/java/org/apache/struts2/dispatcher/DispatcherTest.java
@@ -102,7 +102,6 @@ public class DispatcherTest extends StrutsInternalTestCase {
         Mock mock = new Mock(HttpServletRequest.class);
         mock.expectAndReturn("getCharacterEncoding", "utf-8");
         mock.expectAndReturn("getHeader", "X-Requested-With", "");
-        mock.expectAndReturn("getLocale", Locale.getDefault());
         mock.expectAndReturn("getCharacterEncoding", "utf-8");
         HttpServletRequest req = (HttpServletRequest) mock.proxy();
         HttpServletResponse res = new MockHttpServletResponse();

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java b/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java
index 4bbaa46..a38b8c4 100644
--- a/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java
+++ b/core/src/test/java/org/apache/struts2/interceptor/I18nInterceptorTest.java
@@ -90,19 +90,8 @@ public class I18nInterceptorTest extends TestCase {
         assertEquals(denmark, mai.getInvocationContext().getLocale()); // should create a locale object
     }
 
-    public void testCountryOnlyLocale() throws Exception {
-        prepare(I18nInterceptor.DEFAULT_PARAMETER, "NL");
-        interceptor.intercept(mai);
-
-        assertFalse(mai.getInvocationContext().getParameters().get(I18nInterceptor.DEFAULT_PARAMETER).isDefined()); // should have been removed
-
-        Locale denmark = new Locale("NL");
-        assertNotNull(session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE)); // should be stored here
-        assertEquals(denmark, session.get(I18nInterceptor.DEFAULT_SESSION_ATTRIBUTE)); // should create a locale object
-    }
-
     public void testLanguageOnlyLocale() throws Exception {
-        prepare(I18nInterceptor.DEFAULT_PARAMETER, "da_");
+        prepare(I18nInterceptor.DEFAULT_PARAMETER, "da");
         interceptor.intercept(mai);
 
         assertFalse(mai.getInvocationContext().getParameters().get(I18nInterceptor.DEFAULT_PARAMETER).isDefined()); // should have been removed

http://git-wip-us.apache.org/repos/asf/struts/blob/f06caf7c/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
----------------------------------------------------------------------
diff --git a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
index 9a15b87..aab7d9f 100644
--- a/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
+++ b/plugins/portlet/src/main/java/org/apache/struts2/portlet/dispatcher/Jsr168Dispatcher.java
@@ -26,10 +26,11 @@ import com.opensymphony.xwork2.ActionProxy;
 import com.opensymphony.xwork2.ActionProxyFactory;
 import com.opensymphony.xwork2.config.ConfigurationException;
 import com.opensymphony.xwork2.inject.Container;
-import com.opensymphony.xwork2.util.DefaultLocalizedTextProvider;
+import org.apache.commons.lang3.LocaleUtils;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.LogManager;
 import org.apache.commons.lang3.StringUtils;
+import org.apache.logging.log4j.message.ParameterizedMessage;
 import org.apache.struts2.StrutsConstants;
 import org.apache.struts2.StrutsException;
 import org.apache.struts2.StrutsStatics;
@@ -393,14 +394,7 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics {
         extraContext.put(ActionContext.SESSION, sessionMap);
         extraContext.put(ActionContext.APPLICATION, applicationMap);
 
-        String defaultLocale = container.getInstance(String.class, StrutsConstants.STRUTS_LOCALE);
-        Locale locale;
-        if (defaultLocale != null) {
-            locale = DefaultLocalizedTextProvider.localeFromString(defaultLocale, request.getLocale());
-        } else {
-            locale = request.getLocale();
-        }
-        extraContext.put(ActionContext.LOCALE, locale);
+        extraContext.put(ActionContext.LOCALE, getLocale(request));
 
         extraContext.put(StrutsStatics.STRUTS_PORTLET_CONTEXT, getPortletContext());
         extraContext.put(REQUEST, request);
@@ -424,6 +418,23 @@ public class Jsr168Dispatcher extends GenericPortlet implements StrutsStatics {
         return extraContext;
     }
 
+    protected Locale getLocale(PortletRequest request) {
+        String defaultLocale = container.getInstance(String.class, StrutsConstants.STRUTS_LOCALE);
+        Locale locale;
+        if (defaultLocale != null) {
+            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();
+            }
+        } else {
+            locale = request.getLocale();
+        }
+        return locale;
+    }
+
     /**
      * Loads the action and executes it. This method first creates the action
      * context from the given parameters then loads an <tt>ActionProxy</tt>