Hi,
I tried to test the different o.a.el.stream.Optional methods.
Again I used one of our tests and modify
it: (o.a.el.stream.TestCollectionOperations.testAverage03())
[].stream().average().orElseGet(()->64)
I received:
javax.el.ELException: Cannot convert 64 of type class java.lang.Long to
class javax.el.LambdaExpression
at org.apache.el.lang.ELSupport.coerceToType(ELSupport.java:482)
at
org.apache.el.ExpressionFactoryImpl.coerceToType(ExpressionFactoryImpl.java:48)
at javax.el.Util.buildParameters(Util.java:351)
at javax.el.BeanELResolver.invoke(BeanELResolver.java:173)
at javax.el.CompositeELResolver.invoke(CompositeELResolver.java:84)
at org.apache.el.parser.AstValue.getValue(AstValue.java:146)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:188)
at javax.el.ELProcessor.getValue(ELProcessor.java:45)
The problem is the following:
When in o.a.el.parser.AstValue.getValue(EvaluationContext)
AstMethodParameters mps =
(AstMethodParameters) this.children[i+1]; -> This
returns ()->64
// This is a method
base = resolver.invoke(ctx, base, suffix, null,
mps.getParameters(ctx)); -> when
getParameters is invoked the lambda expression is evaluated and 64 is
returned as a result
Then BeanElResolver tries to invoke
o.a.el.stream.Optional.orElseGet(LambdaExpression) with Long and not with
LambdaExpression.
Regards
Violeta