MethodReference treats proxy-targeting expressions as non-compilable

Issue: SPR-16191
This commit is contained in:
Juergen Hoeller
2017-11-13 23:00:53 +01:00
parent 7406f5993a
commit c30145d6f9
2 changed files with 28 additions and 4 deletions

View File

@@ -724,13 +724,32 @@ public class SpelReproTests extends AbstractExpressionTests {
VarargsReceiver receiver = new VarargsReceiver();
VarargsInterface proxy = (VarargsInterface) Proxy.newProxyInstance(
getClass().getClassLoader(), new Class<?>[]{VarargsInterface.class},
getClass().getClassLoader(), new Class<?>[] {VarargsInterface.class},
(proxy1, method, args) -> method.invoke(receiver, args));
assertEquals("OK", expr.getValue(new StandardEvaluationContext(receiver)));
assertEquals("OK", expr.getValue(new StandardEvaluationContext(proxy)));
}
@Test
public void testCompiledExpressionForProxy_SPR16191() {
SpelExpressionParser expressionParser =
new SpelExpressionParser(new SpelParserConfiguration(SpelCompilerMode.IMMEDIATE, null));
Expression expression = expressionParser.parseExpression("#target.process(#root)");
VarargsReceiver receiver = new VarargsReceiver();
VarargsInterface proxy = (VarargsInterface) Proxy.newProxyInstance(
getClass().getClassLoader(), new Class<?>[] {VarargsInterface.class},
(proxy1, method, args) -> method.invoke(receiver, args));
StandardEvaluationContext evaluationContext = new StandardEvaluationContext();
evaluationContext.setVariable("target", proxy);
String result = expression.getValue(evaluationContext, "foo", String.class);
result = expression.getValue(evaluationContext, "foo", String.class);
assertEquals("OK", result);
}
@Test
public void varargsAndPrimitives_SPR8174() throws Exception {
EvaluationContext emptyEvalContext = new StandardEvaluationContext();