Upgraded from Spring Framework 5.3.15 to 5.3.16 (via Boot) and this expression
T(Character).isUpperCase(c) ? 'uppercase' : 'lowercase'
now throws the exception
org.springframework.expression.spel.SpelEvaluationException: EL1005E: Type cannot be found 'Character'
at org.springframework.expression.spel.support.StandardTypeLocator.findType(StandardTypeLocator.java:117)
at org.thymeleaf.spring5.expression.ThymeleafEvaluationContext$ThymeleafEvaluationContextACLTypeLocator.findType(ThymeleafEvaluationContext.java:193)
at org.springframework.expression.spel.ExpressionState.findType(ExpressionState.java:155)
at org.springframework.expression.spel.ast.TypeReference.getValueInternal(TypeReference.java:69)
at org.springframework.expression.spel.ast.CompoundExpression.getValueRef(CompoundExpression.java:55)
at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:91)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:188)
at org.springframework.expression.spel.ast.Ternary.getValueInternal(Ternary.java:53)
at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:112)
at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:337)
at org.thymeleaf.spring5.expression.SPELVariableExpressionEvaluator.evaluate(SPELVariableExpressionEvaluator.java:265)
... 164 more
Changing it to java.lang.Character
works again.
Possibly it's a Thymeleaf (3.0.14 -> 3.0.15) issue instead?
Comment From: sbrannen
Possibly it's a Thymeleaf (3.0.14 -> 3.0.15) issue instead?
Yes, I assume it's an issue with Thymeleaf.
I am not able to reproduce that SpelEvaluationException
against 5.3.x
(i.e., 5.3.17 snapshots) or main
.
For example, adding the following to one of the test methods in SpelDocumentationTests
works without any issue.
evaluate("(T(Math).random() * 100.0) > 0", true, Boolean.class);
evaluate("T(Character).isUpperCase('Test'.charAt(0)) ? 'uppercase' : 'lowercase'", "uppercase", String.class);
evaluate("T(Character).isUpperCase('Test'.charAt(1)) ? 'uppercase' : 'lowercase'", "lowercase", String.class);
In light of that I am closing this issue.
Please raise an issue with the Thymeleaf team.
Comment From: OrangeDog
I missed it because I looked in thymeleaf-spring instead of thymeleaf: https://github.com/thymeleaf/thymeleaf/issues/878