Replaces LocaleProvider with LocaleProviderFactory
Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/4b022bfb Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/4b022bfb Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/4b022bfb Branch: refs/heads/master Commit: 4b022bfbe5f575908e61d84de885ca171fcca7f3 Parents: 3b738ad Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Wed Mar 15 09:11:31 2017 +0100 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Wed Mar 15 09:11:31 2017 +0100 ---------------------------------------------------------------------- .../com/opensymphony/xwork2/ActionSupport.java | 18 ++++++++++++++---- .../xwork2/config/impl/DefaultConfiguration.java | 2 +- .../providers/XWorkConfigurationProvider.java | 4 +++- .../conversion/impl/DefaultTypeConverter.java | 4 +++- .../validator/DelegatingValidatorContext.java | 18 +++++++++++++++--- .../java/org/apache/struts2/StrutsConstants.java | 4 ++++ .../java/org/apache/struts2/components/I18n.java | 5 +++-- .../config/DefaultBeanSelectionProvider.java | 12 +++++++++--- .../org/apache/struts2/dispatcher/Dispatcher.java | 13 ++++++++++--- .../multipart/AbstractMultiPartRequest.java | 8 +++----- .../interceptor/FileUploadInterceptor.java | 3 ++- .../struts2/interceptor/I18nInterceptor.java | 5 +++-- core/src/main/resources/struts-default.xml | 2 +- .../struts2/tiles/StrutsTilesLocaleResolver.java | 5 +++-- 14 files changed, 74 insertions(+), 29 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java index bb7048f..ea4be0d 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java @@ -19,6 +19,7 @@ import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.inject.Inject; import com.opensymphony.xwork2.interceptor.ValidationAware; import com.opensymphony.xwork2.util.ValueStack; +import net.sf.cglib.core.Local; import java.io.Serializable; import java.util.*; @@ -32,6 +33,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex private final ValidationAwareSupport validationAware = new ValidationAwareSupport(); private transient TextProvider textProvider; + private transient LocaleProvider localeProvider; protected Container container; @@ -61,17 +63,17 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex @Override public Locale getLocale() { - return container.getInstance(LocaleProvider.class).getLocale(); + return getLocaleProvider().getLocale(); } @Override public boolean isValidLocaleString(String localeStr) { - return container.getInstance(LocaleProvider.class).isValidLocaleString(localeStr); + return getLocaleProvider().isValidLocaleString(localeStr); } @Override public boolean isValidLocale(Locale locale) { - return container.getInstance(LocaleProvider.class).isValidLocale(locale); + return getLocaleProvider().isValidLocale(locale); } public boolean hasKey(String key) { @@ -272,7 +274,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex * * @return reference to field with TextProvider */ - private TextProvider getTextProvider() { + protected TextProvider getTextProvider() { if (textProvider == null) { TextProviderFactory tpf = container.inject(TextProviderFactory.class); textProvider = tpf.createInstance(getClass()); @@ -280,6 +282,14 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex return textProvider; } + protected LocaleProvider getLocaleProvider() { + if (localeProvider == null) { + LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class); + localeProvider = localeProviderFactory.createLocaleProvider(); + } + return localeProvider; + } + @Inject public void setContainer(Container container) { this.container = container; http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java index 358eb5c..c7c5a92 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/impl/DefaultConfiguration.java @@ -264,7 +264,7 @@ public class DefaultConfiguration implements Configuration { builder.factory(TextParser.class, OgnlTextParser.class, Scope.SINGLETON); builder.factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON); builder.factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON); - builder.factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON); + builder.factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON); builder.factory(ObjectTypeDeterminer.class, DefaultObjectTypeDeterminer.class, Scope.SINGLETON); builder.factory(PropertyAccessor.class, CompoundRoot.class.getName(), CompoundRootAccessor.class, Scope.SINGLETON); http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java index 853f50e..5c912e1 100644 --- a/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java +++ b/core/src/main/java/com/opensymphony/xwork2/config/providers/XWorkConfigurationProvider.java @@ -2,6 +2,8 @@ package com.opensymphony.xwork2.config.providers; import com.opensymphony.xwork2.ActionProxyFactory; import com.opensymphony.xwork2.DefaultActionProxyFactory; +import com.opensymphony.xwork2.DefaultLocaleProviderFactory; +import com.opensymphony.xwork2.LocaleProviderFactory; import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.factory.DefaultUnknownHandlerFactory; import com.opensymphony.xwork2.factory.UnknownHandlerFactory; @@ -186,7 +188,7 @@ public class XWorkConfigurationProvider implements ConfigurationProvider { .factory(TextProvider.class, "system", DefaultTextProvider.class, Scope.SINGLETON) .factory(TextProvider.class, TextProviderSupport.class, Scope.SINGLETON) - .factory(LocaleProvider.class, DefaultLocaleProvider.class, Scope.SINGLETON) + .factory(LocaleProviderFactory.class, DefaultLocaleProviderFactory.class, Scope.SINGLETON) .factory(OgnlUtil.class, Scope.SINGLETON) .factory(CollectionConverter.class, Scope.SINGLETON) .factory(ArrayConverter.class, Scope.SINGLETON) http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java index 8b3a9a6..f191680 100644 --- a/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java +++ b/core/src/main/java/com/opensymphony/xwork2/conversion/impl/DefaultTypeConverter.java @@ -32,6 +32,7 @@ package com.opensymphony.xwork2.conversion.impl; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.LocaleProvider; +import com.opensymphony.xwork2.LocaleProviderFactory; import com.opensymphony.xwork2.conversion.TypeConverter; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.inject.Inject; @@ -349,7 +350,8 @@ public abstract class DefaultTypeConverter implements TypeConverter { locale = (Locale) context.get(ActionContext.LOCALE); } if (locale == null) { - locale = container.getInstance(LocaleProvider.class).getLocale(); + LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class); + locale = localeProviderFactory.createLocaleProvider().getLocale(); } return locale; } http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java index 90812bd..b8921e9 100644 --- a/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java +++ b/core/src/main/java/com/opensymphony/xwork2/validator/DelegatingValidatorContext.java @@ -253,18 +253,30 @@ public class DelegatingValidatorContext implements ValidatorContext { * An implementation of LocaleProvider which gets the locale from the action context. */ private static class ActionContextLocaleProvider implements LocaleProvider { + + private LocaleProvider localeProvider; + + private LocaleProvider getLocaleProvider() { + if (localeProvider == null) { + LocaleProviderFactory localeProviderFactory = ActionContext.getContext().getInstance(LocaleProviderFactory.class); + localeProvider = localeProviderFactory.createLocaleProvider(); + } + return localeProvider; + } + + @Override public Locale getLocale() { - return ActionContext.getContext().getInstance(LocaleProvider.class).getLocale(); + return getLocaleProvider().getLocale(); } @Override public boolean isValidLocaleString(String localeStr) { - return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocaleString(localeStr); + return getLocaleProvider().isValidLocaleString(localeStr); } @Override public boolean isValidLocale(Locale locale) { - return ActionContext.getContext().getInstance(LocaleProvider.class).isValidLocale(locale); + return getLocaleProvider().isValidLocale(locale); } } http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/StrutsConstants.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/StrutsConstants.java b/core/src/main/java/org/apache/struts2/StrutsConstants.java index 3d898ce..1160d88 100644 --- a/core/src/main/java/org/apache/struts2/StrutsConstants.java +++ b/core/src/main/java/org/apache/struts2/StrutsConstants.java @@ -201,8 +201,12 @@ public final class StrutsConstants { public static final String STRUTS_XWORKTEXTPROVIDER = "struts.xworkTextProvider"; /** The {@link com.opensymphony.xwork2.LocaleProvider} implementation class */ + @Deprecated public static final String STRUTS_LOCALE_PROVIDER = "struts.localeProvider"; + /** The {@link com.opensymphony.xwork2.LocaleProviderFactory} implementation class */ + public static final String STRUTS_LOCALE_PROVIDER_FACTORY = "struts.localeProviderFactory"; + /** The name of the parameter to create when mapping an id (used by some action mappers) */ public static final String STRUTS_ID_PARAMETER_NAME = "struts.mapper.idParameterName"; http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/components/I18n.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/components/I18n.java b/core/src/main/java/org/apache/struts2/components/I18n.java index f934a3e..89e38bb 100644 --- a/core/src/main/java/org/apache/struts2/components/I18n.java +++ b/core/src/main/java/org/apache/struts2/components/I18n.java @@ -24,6 +24,7 @@ package org.apache.struts2.components; import java.io.Writer; import java.util.ResourceBundle; +import com.opensymphony.xwork2.LocaleProviderFactory; import org.apache.struts2.views.annotations.StrutsTag; import org.apache.struts2.views.annotations.StrutsTagAttribute; import org.apache.struts2.StrutsException; @@ -109,8 +110,8 @@ public class I18n extends Component { } @Inject - public void setLocaleProvider(LocaleProvider localeProvider) { - this.localeProvider = localeProvider; + public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) { + this.localeProvider = localeProviderFactory.createLocaleProvider(); } public boolean start(Writer writer) { http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java index a89ae9a..a72bd11 100644 --- a/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java +++ b/core/src/main/java/org/apache/struts2/config/DefaultBeanSelectionProvider.java @@ -22,6 +22,7 @@ package org.apache.struts2.config; import com.opensymphony.xwork2.ActionProxyFactory; +import com.opensymphony.xwork2.LocaleProviderFactory; import com.opensymphony.xwork2.LocalizedTextProvider; import com.opensymphony.xwork2.TextProviderFactory; import com.opensymphony.xwork2.factory.UnknownHandlerFactory; @@ -29,7 +30,6 @@ import com.opensymphony.xwork2.security.AcceptedPatternsChecker; import com.opensymphony.xwork2.security.ExcludedPatternsChecker; import com.opensymphony.xwork2.FileManager; import com.opensymphony.xwork2.FileManagerFactory; -import com.opensymphony.xwork2.LocaleProvider; import com.opensymphony.xwork2.ObjectFactory; import com.opensymphony.xwork2.TextProvider; import com.opensymphony.xwork2.UnknownHandlerManager; @@ -221,7 +221,13 @@ import org.apache.struts2.views.velocity.VelocityManager; * <td>com.opensymphony.xwork2.LocaleProvider</td> * <td>struts.localeProvider</td> * <td>singleton</td> - * <td>Allows provide custom TextProvider for whole application</td> + * <td>DEPRECATED! Allows provide custom TextProvider for whole application</td> + * </tr> + * <tr> + * <td>com.opensymphony.xwork2.LocaleProviderFactory</td> + * <td>struts.localeProviderFactory</td> + * <td>singleton</td> + * <td>Allows provide custom LocaleProvider for whole application</td> * </tr> * <tr> * <td>org.apache.struts2.components.UrlRenderer</td> @@ -393,7 +399,7 @@ public class DefaultBeanSelectionProvider extends AbstractBeanSelectionProvider alias(TextProvider.class, StrutsConstants.STRUTS_XWORKTEXTPROVIDER, builder, props, Scope.PROTOTYPE); alias(TextProviderFactory.class, StrutsConstants.STRUTS_TEXT_PROVIDER_FACTORY, builder, props, Scope.PROTOTYPE); - alias(LocaleProvider.class, StrutsConstants.STRUTS_LOCALE_PROVIDER, builder, props); + alias(LocaleProviderFactory.class, StrutsConstants.STRUTS_LOCALE_PROVIDER_FACTORY, builder, props); alias(LocalizedTextProvider.class, StrutsConstants.STRUTS_LOCALIZED_TEXT_PROVIDER, builder, props); alias(ActionProxyFactory.class, StrutsConstants.STRUTS_ACTIONPROXYFACTORY, builder, props); http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/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 047238f..b7714be 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/Dispatcher.java @@ -783,9 +783,16 @@ public class Dispatcher { String content_type = request.getContentType(); if (content_type != null && content_type.contains("multipart/form-data")) { - MultiPartRequest mpr = getMultiPartRequest(); - LocaleProvider provider = getContainer().getInstance(LocaleProvider.class); - request = new MultiPartRequestWrapper(mpr, request, getSaveDir(), provider, disableRequestAttributeValueStackLookup); + MultiPartRequest multiPartRequest = getMultiPartRequest(); + LocaleProviderFactory localeProviderFactory = getContainer().getInstance(LocaleProviderFactory.class); + + request = new MultiPartRequestWrapper( + multiPartRequest, + request, + getSaveDir(), + localeProviderFactory.createLocaleProvider(), + disableRequestAttributeValueStackLookup + ); } else { request = new StrutsRequestWrapper(request, disableRequestAttributeValueStackLookup); } http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java index 6c3f1f3..cc20523 100644 --- a/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java +++ b/core/src/main/java/org/apache/struts2/dispatcher/multipart/AbstractMultiPartRequest.java @@ -1,6 +1,7 @@ package org.apache.struts2.dispatcher.multipart; import com.opensymphony.xwork2.LocaleProvider; +import com.opensymphony.xwork2.LocaleProviderFactory; import com.opensymphony.xwork2.inject.Inject; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -70,12 +71,9 @@ public abstract class AbstractMultiPartRequest implements MultiPartRequest { this.maxSize = Long.parseLong(maxSize); } - /** - * @param provider Injects the Struts locale provider. - */ @Inject - public void setLocaleProvider(LocaleProvider provider) { - defaultLocale = provider.getLocale(); + public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) { + defaultLocale = localeProviderFactory.createLocaleProvider().getLocale(); } /** http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java ---------------------------------------------------------------------- diff --git a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java index a428b53..b00f2e3 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/FileUploadInterceptor.java @@ -455,7 +455,8 @@ public class FileUploadInterceptor extends AbstractInterceptor { if (action instanceof LocaleProvider) { localeProvider = (LocaleProvider) action; } else { - localeProvider = container.getInstance(LocaleProvider.class); + LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class); + localeProvider = localeProviderFactory.createLocaleProvider(); } return localeProvider; } http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/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 4b6c8f5..f97176f 100644 --- a/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java +++ b/core/src/main/java/org/apache/struts2/interceptor/I18nInterceptor.java @@ -22,6 +22,7 @@ package org.apache.struts2.interceptor; import com.opensymphony.xwork2.ActionInvocation; 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; @@ -93,8 +94,8 @@ public class I18nInterceptor extends AbstractInterceptor { } @Inject - public void setLocaleProvider(LocaleProvider localeProvider) { - this.localeProvider = localeProvider; + public void setLocaleProviderFactory(LocaleProviderFactory localeProviderFactory) { + this.localeProvider = localeProviderFactory.createLocaleProvider(); } @Override http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/core/src/main/resources/struts-default.xml ---------------------------------------------------------------------- diff --git a/core/src/main/resources/struts-default.xml b/core/src/main/resources/struts-default.xml index 1f516b7..3a4f6ee 100644 --- a/core/src/main/resources/struts-default.xml +++ b/core/src/main/resources/struts-default.xml @@ -133,7 +133,7 @@ <bean type="com.opensymphony.xwork2.TextProviderFactory" name="struts" class="com.opensymphony.xwork2.TextProviderFactory" scope="prototype" /> <bean type="com.opensymphony.xwork2.LocalizedTextProvider" name="struts" class="com.opensymphony.xwork2.util.DefaultLocalizedTextProvider" scope="singleton" /> <bean type="com.opensymphony.xwork2.TextProvider" name="struts" class="com.opensymphony.xwork2.TextProviderSupport" scope="prototype" /> - <bean type="com.opensymphony.xwork2.LocaleProvider" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProvider" scope="singleton" /> + <bean type="com.opensymphony.xwork2.LocaleProviderFactory" name="struts" class="com.opensymphony.xwork2.DefaultLocaleProviderFactory" scope="singleton" /> <bean type="org.apache.struts2.components.UrlRenderer" name="struts" class="org.apache.struts2.components.ServletUrlRenderer"/> <bean type="org.apache.struts2.views.util.UrlHelper" name="struts" class="org.apache.struts2.views.util.DefaultUrlHelper"/> http://git-wip-us.apache.org/repos/asf/struts/blob/4b022bfb/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java ---------------------------------------------------------------------- diff --git a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java index 2c0ef9d..e75cd48 100644 --- a/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java +++ b/plugins/tiles/src/main/java/org/apache/struts2/tiles/StrutsTilesLocaleResolver.java @@ -21,6 +21,7 @@ package org.apache.struts2.tiles; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.LocaleProvider; +import com.opensymphony.xwork2.LocaleProviderFactory; import com.opensymphony.xwork2.config.ConfigurationException; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -46,9 +47,9 @@ public class StrutsTilesLocaleResolver implements LocaleResolver { throw new ConfigurationException("There is no ActionContext for current request!"); } - LocaleProvider provider = ctx.getInstance(LocaleProvider.class); + LocaleProviderFactory localeProviderFactory = ctx.getInstance(LocaleProviderFactory.class); - return provider.getLocale(); + return localeProviderFactory.createLocaleProvider().getLocale(); } }