This is an automated email from the ASF dual-hosted git repository. kusal pushed a commit to branch WW-5378-no-context-fallback in repository https://gitbox.apache.org/repos/asf/struts.git
commit 6eb1b6467b16c2e4a9c87aac5be0d6e2d2ce07bd Author: Kusal Kithul-Godage <g...@kusal.io> AuthorDate: Thu Dec 28 00:29:09 2023 +1100 WW-5378 Assorted refactor and clean up --- .../opensymphony/xwork2/ognl/OgnlValueStack.java | 35 +++++----------------- .../xwork2/ognl/OgnlValueStackFactory.java | 20 +++++++------ 2 files changed, 18 insertions(+), 37 deletions(-) diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java index ddcd4429a..349d4dbb2 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStack.java @@ -337,34 +337,16 @@ public class OgnlValueStack implements Serializable, ValueStack, ClearableValueS } private Object tryFindValue(String expr) throws OgnlException { - Object value; - expr = lookupForOverrides(expr); - if (defaultType != null) { - value = findValue(expr, defaultType); - } else { - value = getValueUsingOgnl(expr); - if (value == null) { - value = findInContext(expr); - } - } - return value; + return tryFindValue(expr, defaultType); } private String lookupForOverrides(String expr) { - if ((overrides != null) && overrides.containsKey(expr)) { + if (overrides != null && overrides.containsKey(expr)) { expr = (String) overrides.get(expr); } return expr; } - private Object getValueUsingOgnl(String expr) throws OgnlException { - try { - return ognlUtil.getValue(expr, context, root); - } finally { - context.remove(THROW_EXCEPTION_ON_FAILURE); - } - } - public Object findValue(String expr) { return findValue(expr, false); } @@ -419,22 +401,19 @@ public class OgnlValueStack implements Serializable, ValueStack, ClearableValueS } private Object tryFindValue(String expr, Class asType) throws OgnlException { - Object value = null; try { expr = lookupForOverrides(expr); - value = getValue(expr, asType); + Object value = ognlUtil.getValue(expr, context, root, asType); if (value == null) { value = findInContext(expr); - return converter.convertValue(getContext(), value, asType); + if (value != null && asType != null) { + value = converter.convertValue(getContext(), value, asType); + } } + return value; } finally { context.remove(THROW_EXCEPTION_ON_FAILURE); } - return value; - } - - private Object getValue(String expr, Class asType) throws OgnlException { - return ognlUtil.getValue(expr, context, root, asType); } protected Object findInContext(String name) { diff --git a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java index 66798c034..6564edf68 100644 --- a/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java +++ b/core/src/main/java/com/opensymphony/xwork2/ognl/OgnlValueStackFactory.java @@ -59,19 +59,21 @@ public class OgnlValueStackFactory implements ValueStackFactory { protected void setTextProvider(TextProvider textProvider) { this.textProvider = textProvider; } - + @Override public ValueStack createValueStack() { - ValueStack stack = new OgnlValueStack( - xworkConverter, compoundRootAccessor, textProvider, container.getInstance(SecurityMemberAccess.class)); - container.inject(stack); - return stack.getActionContext().withContainer(container).withValueStack(stack).getValueStack(); + return createValueStack(null, true); } + @Override public ValueStack createValueStack(ValueStack stack) { - ValueStack result = new OgnlValueStack( - stack, xworkConverter, compoundRootAccessor, container.getInstance(SecurityMemberAccess.class)); - container.inject(result); - return result.getActionContext().withContainer(container).withValueStack(result).getValueStack(); + return createValueStack(stack, false); + } + + protected ValueStack createValueStack(ValueStack stack, boolean useTextProvider) { + ValueStack newStack = new OgnlValueStack( + stack, xworkConverter, compoundRootAccessor, useTextProvider ? textProvider : null, container.getInstance(SecurityMemberAccess.class)); + container.inject(newStack); + return newStack.getActionContext().withContainer(container).withValueStack(newStack).getValueStack(); } @Inject