@Override public StandardEvaluationContext createEvaluationContextInternal(Authentication auth, MethodInvocation mi) { StandardEvaluationContext ec = super.createEvaluationContextInternal(auth, mi); ec.addMethodResolver(new OAuthMethodResolver()); return ec; }
assertEquals(ABC.C, Array.get(result, 2)); context.addMethodResolver(new MethodResolver() { @Override public MethodExecutor resolve(EvaluationContext context, Object targetObject, String name,
@Test public void testAddingMethodResolvers() { StandardEvaluationContext ctx = new StandardEvaluationContext(); // reflective method accessor is the only one by default List<MethodResolver> methodResolvers = ctx.getMethodResolvers(); assertEquals(1, methodResolvers.size()); MethodResolver dummy = new DummyMethodResolver(); ctx.addMethodResolver(dummy); assertEquals(2, ctx.getMethodResolvers().size()); List<MethodResolver> copy = new ArrayList<>(); copy.addAll(ctx.getMethodResolvers()); assertTrue(ctx.removeMethodResolver(dummy)); assertFalse(ctx.removeMethodResolver(dummy)); assertEquals(1, ctx.getMethodResolvers().size()); ctx.setMethodResolvers(copy); assertEquals(2, ctx.getMethodResolvers().size()); }
@Test public void testScenario04_ControllingWhichMethodsRun() throws Exception { SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.setRootObject(new Supervisor("Ben")); // so non-qualified references 'hasRole()' 'hasIpAddress()' are invoked against it); ctx.addMethodResolver(new MyMethodResolver()); // NEEDS TO OVERRIDE THE REFLECTION ONE - SHOW REORDERING MECHANISM // Might be better with a as a variable although it would work as a property too... // Variable references using a '#' // SpelExpression expr = parser.parseExpression("(hasRole('SUPERVISOR') or (#a < 1.042)) and hasIpAddress('10.10.0.0/16')"); Expression expr = parser.parseRaw("(hasRole(3) or (#a < 1.042)) and hasIpAddress('10.10.0.0/16')"); Boolean value = null; ctx.setVariable("a",1.0d); // referenced as #a in the expression value = expr.getValue(ctx,Boolean.class); assertTrue(value); // ctx.setRootObject(new Manager("Luke")); // ctx.setVariable("a",1.043d); // value = (Boolean)expr.getValue(ctx,Boolean.class); // assertFalse(value); }
@Override protected void customizeEvaluationContext(StandardEvaluationContext evalContext) { evalContext.addMethodResolver(new TenantMethodResolver()); } });
public MapExpressionMethods(StandardEvaluationContext evaluationContext, boolean autoCustomize, boolean replaceMethodResolver) { Assert.notNull(evaluationContext, "Evaluation context cannot be null"); if (autoCustomize) { MethodResolver methodResolver = new PartitionKeyMethodResolver(); if (replaceMethodResolver) { List<MethodResolver> methodResolvers = new ArrayList<MethodResolver>(); methodResolvers.add(methodResolver); evaluationContext.setMethodResolvers(methodResolvers); } else { evaluationContext.addMethodResolver(methodResolver); } } if (autoCustomize) { evaluationContext.addPropertyAccessor(new MapPartitionKeyPropertyAccessor()); } this.context = evaluationContext; }
/** * Instantiates a new message expression methods with * a {@link StandardEvaluationContext}. * * @param evaluationContext the spel evaluation context * @param autoCustomize auto customize method resolver and property accessor * @param replaceMethodResolver replace context method resolver */ public MessageExpressionMethods(StandardEvaluationContext evaluationContext, boolean autoCustomize, boolean replaceMethodResolver) { Assert.notNull(evaluationContext, "Evaluation context cannot be null"); if (autoCustomize) { MethodResolver methodResolver = new MessagePartitionKeyMethodResolver(); if (replaceMethodResolver) { List<MethodResolver> methodResolvers = new ArrayList<MethodResolver>(); methodResolvers.add(methodResolver); evaluationContext.setMethodResolvers(methodResolvers); } else { evaluationContext.addMethodResolver(methodResolver); } } if (autoCustomize) { evaluationContext.addPropertyAccessor(new MessagePartitionKeyPropertyAccessor()); } this.context = evaluationContext; }
private StandardEvaluationContext createEvaluationContext(Context aContext) { StandardEvaluationContext context = new StandardEvaluationContext(aContext); context.addPropertyAccessor(new MapPropertyAccessor()); context.addMethodResolver(methodResolver()); return context; }
protected void customizeEvaluationContext( StandardEvaluationContext evalContext) { evalContext.addMethodResolver(new InfraReflectiveMethodResolver());
/** * Instantiates a new map expression methods with * a {@link EvaluationContext} which is expected to be * a {@link StandardEvaluationContext}. * * @param evaluationContext the passed evaluation context */ public MapExpressionMethods(EvaluationContext evaluationContext) { if (evaluationContext instanceof StandardEvaluationContext) { // we were given a context, so don't register anything context = (StandardEvaluationContext) evaluationContext; } else { context = new StandardEvaluationContext(); context.addMethodResolver(new PartitionKeyMethodResolver()); context.addPropertyAccessor(new MapPartitionKeyPropertyAccessor()); } }
/** * Get the {@link EvaluationContext} to use to evaluate the configured {@link Expression} */ protected EvaluationContext getEvaluationContext(MethodInvocation methodInvocation, Object... args) { final StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.setBeanResolver(new BeanFactoryResolver(this.beanFactory)); evaluationContext.setVariable("invocation", methodInvocation); evaluationContext.setVariable("args", args); evaluationContext.setVariable("key", keyCallbackObject); evaluationContext.addMethodResolver(this.methodResolver); return evaluationContext; }
@Override public StandardEvaluationContext getEvaluationContext(Object rootObject) { StandardEvaluationContext ec = new StandardEvaluationContext(); if (beanFactory != null) { ec.setBeanResolver(new BeanFactoryResolver(beanFactory)); } ExtensionAwarePropertyAccessor accessor = new ExtensionAwarePropertyAccessor(extensions.get()); ec.addPropertyAccessor(accessor); ec.addPropertyAccessor(new ReflectivePropertyAccessor()); ec.addMethodResolver(accessor); if (rootObject != null) { ec.setRootObject(rootObject); } return ec; }