[ https://issues.apache.org/jira/browse/WW-4463?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lukasz Lenart updated WW-4463: ------------------------------ Fix Version/s: 7.1.0 (was: 7.0.0) > Support propagating ognl errors other than NoSuchPropertyException > ------------------------------------------------------------------ > > Key: WW-4463 > URL: https://issues.apache.org/jira/browse/WW-4463 > Project: Struts 2 > Issue Type: Improvement > Components: Core Actions > Affects Versions: 2.3.20 > Reporter: Jasper Rosenberg > Priority: Minor > Labels: ognl > Fix For: 7.1.0 > > > So, if you have a getter on an action that does some real work (say lazy load > a list of cars from the database), and therefore might fail, it would be nice > to have the option to have that propagate the exception, rather than be > interpreted as if the property was not defined. > The place that looks like this should be done is OgnlValueStack.setValue(). > It takes throwExceptionOnFailure, but that is all or nothing. That ends up > including XWorkExceptions with a root issue of ognl NoSuchPropertyException. > These are frequent and not something we care about, at least in our code > base. What I'd like to do is have some kind of parameterization that would > let me turn on error propagation for not ognl property missing error. I did > this locally, but it had to be super hacky because OgnlValueStack.setValue() > is private. I basically installed my own ValueStackFactory that returned a > copy of OgnlValueStack with the function changed to be like: > {code:java} > /** > * @see > com.opensymphony.xwork2.util.ValueStack#findValue(java.lang.String) > */ > public Object findValue(String expr, boolean throwExceptionOnFailure) { > try { > setupExceptionOnFailure(throwExceptionOnFailure); > return tryFindValueWhenExpressionIsNotNull(expr); > } catch (OgnlException e) { > return handleOgnlException(expr, throwExceptionOnFailure, e); > } catch (XWorkException e) { > Throwable cause = e.getCause(); > if (cause instanceof NoSuchPropertyException) { > return handleOtherException(expr, throwExceptionOnFailure, e); > } > return handleOtherException(expr, true, e); > } catch (Exception e) { > return handleOtherException(expr, throwExceptionOnFailure, e); > } finally { > ReflectionContextState.clear(context); > } > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)