Repository: struts Updated Branches: refs/heads/master bca42a209 -> 50a0a72e9
WW-4861 Adds fallback to lookup container using ActionContext Project: http://git-wip-us.apache.org/repos/asf/struts/repo Commit: http://git-wip-us.apache.org/repos/asf/struts/commit/50a0a72e Tree: http://git-wip-us.apache.org/repos/asf/struts/tree/50a0a72e Diff: http://git-wip-us.apache.org/repos/asf/struts/diff/50a0a72e Branch: refs/heads/master Commit: 50a0a72e9d4bcf96bdcb6e1d9adaefa8c11f19e8 Parents: d41bd50 Author: Lukasz Lenart <lukaszlen...@apache.org> Authored: Tue Sep 19 09:24:08 2017 +0200 Committer: Lukasz Lenart <lukaszlen...@apache.org> Committed: Tue Sep 19 09:26:20 2017 +0200 ---------------------------------------------------------------------- .../com/opensymphony/xwork2/ActionSupport.java | 26 ++++++++++++++++++++ 1 file changed, 26 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/struts/blob/50a0a72e/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 cb1ac47..7d79471 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java +++ b/core/src/main/java/com/opensymphony/xwork2/ActionSupport.java @@ -19,6 +19,9 @@ 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 org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.apache.struts2.StrutsConstants; import java.io.Serializable; import java.util.*; @@ -29,6 +32,8 @@ import java.util.*; */ public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable { + private static final Logger LOG = LogManager.getLogger(ActionSupport.class); + private final ValidationAwareSupport validationAware = new ValidationAwareSupport(); private transient TextProvider textProvider; @@ -274,6 +279,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex * @return reference to field with TextProvider */ protected TextProvider getTextProvider() { + checkContainer(); if (textProvider == null) { TextProviderFactory tpf = container.getInstance(TextProviderFactory.class); textProvider = tpf.createInstance(getClass()); @@ -282,6 +288,7 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex } protected LocaleProvider getLocaleProvider() { + checkContainer(); if (localeProvider == null) { LocaleProviderFactory localeProviderFactory = container.getInstance(LocaleProviderFactory.class); localeProvider = localeProviderFactory.createLocaleProvider(); @@ -289,6 +296,25 @@ public class ActionSupport implements Action, Validateable, ValidationAware, Tex return localeProvider; } + /** + * TODO: This a temporary solution, maybe we should consider stop injecting container into beans + */ + private void checkContainer() { + if (container == null) { + container = ActionContext.getContext().getContainer(); + if (container != null) { + boolean devMode = Boolean.parseBoolean(container.getInstance(String.class, StrutsConstants.STRUTS_DEVMODE)); + if (devMode) { + LOG.warn("Container is null, action was created manually? Fallback to ActionContext"); + } else { + LOG.debug("Container is null, action was created manually? Fallback to ActionContext"); + } + } else { + LOG.warn("Container is null, action was created out of ActionContext scope?!?"); + } + } + } + @Inject public void setContainer(Container container) { this.container = container;