[
https://issues.apache.org/jira/browse/OGNL-261?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Pascal Davoust updated OGNL-261:
--------------------------------
Description:
Spin-off discussion from WW-5147 and related
[https://github.com/apache/struts/pull/504] pull request.
Whenever an OGNL expression compiles into an AST with compound node statements,
the evaluation can result into a {{{}OgnlException("source is null for
getProperty(null, "propertyName")"){}}}.
This stems from the logic in method {{ognl.ASTChain.getValueBody(OgnlContext,
Object)}} which uses the result of the current node as the source for the next
node in the chain.
If the result of the current node evaluation results into {{{}null{}}}, then
the next node throws the exception.
As mentioned in [https://github.com/apache/struts/pull/504], there is a
question about whether this logic is by design or if there is something to
investigate (I definitely lack background and OGNL knowledge to even guess).
If this behavior is legitimate, it also turns out that this situation occurs a
lot and the cost of building the exceptions with the stack traces is fairly
noticeable: profiling the code while under load shows a significant amount of
time spent building the stack traces.
Depending on the outcome of the discussion above, would it make sense to
envision to allow OGNL to throw these exceptions without the stack traces if
configured so (which can be easily done from JDK 7 using the constructor taking
the {{enableSuppression}} and {{writableStackTrace}} arguments - can also be
achieved from older JDKs by overriding method {{fillInStackTrace()}} )?
Note that a preliminary attempt showed that the cost of building these
exceptions without the stack traces is virtually zero, making the exceptions
totally painless and invisible (they appear no more while profiling).
was:
Spin-off discussion from WW-5147 and related
[https://github.com/apache/struts/pull/504] pull request.
Whenever an OGNL expression compiles into an AST with compound node statements,
the evaluation can result into a {{{}OgnlException("source is null for
getProperty(null, "propertyName")"){}}}.
This stems from the logic in method {{ognl.ASTChain.getValueBody(OgnlContext,
Object)}} which uses the result of the current node as the source for the next
node in the chain.
If the result of the current node evaluation results into {{{}null{}}}, then
the next node throws the exception.
As mentioned in [https://github.com/apache/struts/pull/504], there is a
question about whether this logic is by design of if there is something to
investigate (I definitely lack background and OGNL knowledge to even guess).
If this behavior is legitimate, it also turns out that this situation occurs a
lot and the cost of building the exceptions with the stack traces is fairly
noticeable: profiling the code while under load shows a significant amount of
time spent building the stack traces.
Depending on the outcome of the discussion above, would it make sense to
envision to allow OGNL to throw these exceptions without the stack traces if
configured so (which can be easily done from JDK 7 using the constructor taking
the {{enableSuppression}} and {{writableStackTrace}} arguments - can also be
achieved from older JDKs by overriding method {{fillInStackTrace()}} )?
Note that a preliminary attempt showed that the cost of building these
exceptions without the stack traces is virtually zero, making the exceptions
totally painless and invisible (they appear no more while profiling).
> OgnlException with "source is null for getProperty" thrown when using
> compound expression
> -----------------------------------------------------------------------------------------
>
> Key: OGNL-261
> URL: https://issues.apache.org/jira/browse/OGNL-261
> Project: Commons OGNL
> Issue Type: Improvement
> Components: Core Runtime
> Reporter: Pascal Davoust
> Priority: Major
>
> Spin-off discussion from WW-5147 and related
> [https://github.com/apache/struts/pull/504] pull request.
> Whenever an OGNL expression compiles into an AST with compound node
> statements, the evaluation can result into a {{{}OgnlException("source is
> null for getProperty(null, "propertyName")"){}}}.
> This stems from the logic in method {{ognl.ASTChain.getValueBody(OgnlContext,
> Object)}} which uses the result of the current node as the source for the
> next node in the chain.
> If the result of the current node evaluation results into {{{}null{}}}, then
> the next node throws the exception.
> As mentioned in [https://github.com/apache/struts/pull/504], there is a
> question about whether this logic is by design or if there is something to
> investigate (I definitely lack background and OGNL knowledge to even guess).
> If this behavior is legitimate, it also turns out that this situation occurs
> a lot and the cost of building the exceptions with the stack traces is fairly
> noticeable: profiling the code while under load shows a significant amount of
> time spent building the stack traces.
> Depending on the outcome of the discussion above, would it make sense to
> envision to allow OGNL to throw these exceptions without the stack traces if
> configured so (which can be easily done from JDK 7 using the constructor
> taking the {{enableSuppression}} and {{writableStackTrace}} arguments - can
> also be achieved from older JDKs by overriding method {{fillInStackTrace()}}
> )?
> Note that a preliminary attempt showed that the cost of building these
> exceptions without the stack traces is virtually zero, making the exceptions
> totally painless and invisible (they appear no more while profiling).
--
This message was sent by Atlassian Jira
(v8.20.1#820001)