sec.addPropertyAccessor(new EnvironmentAccessor()); sec.setBeanResolver(new BeanFactoryResolver(evalContext.getBeanFactory())); sec.setTypeLocator(new StandardTypeLocator(evalContext.getBeanFactory().getBeanClassLoader())); ConversionService conversionService = evalContext.getBeanFactory().getConversionService(); if (conversionService != null) {
sec.addPropertyAccessor(new EnvironmentAccessor()); sec.setBeanResolver(new BeanFactoryResolver(evalContext.getBeanFactory())); sec.setTypeLocator(new StandardTypeLocator(evalContext.getBeanFactory().getBeanClassLoader())); ConversionService conversionService = evalContext.getBeanFactory().getConversionService(); if (conversionService != null) {
context.setTypeLocator(new MyTypeLocator());
@Test public void testStandardEvaluationContext() { StandardEvaluationContext context = new StandardEvaluationContext(); assertNotNull(context.getTypeComparator()); TypeComparator tc = new StandardTypeComparator(); context.setTypeComparator(tc); assertEquals(tc, context.getTypeComparator()); TypeLocator tl = new StandardTypeLocator(); context.setTypeLocator(tl); assertEquals(tl, context.getTypeLocator()); }
@Override public StandardEvaluationContext getObject() throws Exception { StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); if (this.typeLocator != null) { evaluationContext.setTypeLocator(this.typeLocator); } evaluationContext.setBeanResolver(this.beanResolver); evaluationContext.setTypeConverter(getTypeConverter()); for (PropertyAccessor propertyAccessor : getPropertyAccessors().values()) { evaluationContext.addPropertyAccessor(propertyAccessor); } evaluationContext.addPropertyAccessor(new MapAccessor()); for (Entry<String, Method> functionEntry : getFunctions().entrySet()) { evaluationContext.registerFunction(functionEntry.getKey(), functionEntry.getValue()); } return evaluationContext; }
public Object evaluate(String expression, Object root, Object... attrs) { Expression parsed = new SpelExpressionParser(this.config) .parseExpression(expression); StandardEvaluationContext context = new StandardEvaluationContext(root); context.setTypeLocator(this.typeLocator); if (attrs.length % 2 != 0) { throw new IllegalArgumentException( "Context attributes must be name, value pairs"); } for (int i = 0; i < attrs.length / 2; i++) { String name = (String) attrs[2 * i]; Object value = attrs[2 * i + 1]; context.setVariable(name, value); } return parsed.getValue(context); }
public void run(String... args) { ClassLoader contextLoader = Thread.currentThread().getContextClassLoader(); try { ClassUtils.overrideThreadContextClassLoader(this.classLoader); Class<?> cls = this.classLoader.loadClass(ContextRunner.class.getName()); this.app = new StandardEvaluationContext(cls.getDeclaredConstructor().newInstance()); this.app.setTypeLocator(new StandardTypeLocator(this.classLoader)); runContext(this.source, defaultProperties(UUID.randomUUID().toString()), args); } catch (Exception e) { logger.error("Cannot deploy", e); } finally { ClassUtils.overrideThreadContextClassLoader(contextLoader); } RuntimeException e = getError(); if (e != null) { throw e; } }
/** * Creates a configured SpEL evaluation context * * @param rootObject the root object to transform * @param allowUnknownKeys flag to control what helper functions are available * @return an evaluation context hooked with helper functions and correct ACL via whitelisting */ public StandardEvaluationContext buildEvaluationContext(Object rootObject, boolean allowUnknownKeys) { ReturnTypeRestrictor returnTypeRestrictor = new ReturnTypeRestrictor(allowedReturnTypes); StandardEvaluationContext evaluationContext = new StandardEvaluationContext(rootObject); evaluationContext.setTypeLocator(new WhitelistTypeLocator()); evaluationContext.setMethodResolvers(Collections.singletonList( new FilteredMethodResolver(returnTypeRestrictor))); evaluationContext.setPropertyAccessors(Arrays.asList(new MapPropertyAccessor(allowUnknownKeys), new FilteredPropertyAccessor(returnTypeRestrictor))); try { for (Map.Entry<String, List<Class<?>>> m : registeredHelperFunctions.entrySet()) { registerFunction(evaluationContext, m.getKey(), m.getValue().toArray(new Class<?>[0])); } } catch (NoSuchMethodException e) { // Indicates a function was not properly registered. This should not happen. Please fix the faulty function LOGGER.error("Failed to register helper functions for rootObject {}", rootObject, e); } return evaluationContext; } }
@Override public StandardEvaluationContext getObject() throws Exception { StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); if (this.typeLocator != null) { evaluationContext.setTypeLocator(this.typeLocator); } evaluationContext.setBeanResolver(this.beanResolver); evaluationContext.setTypeConverter(getTypeConverter()); for (PropertyAccessor propertyAccessor : getPropertyAccessors().values()) { evaluationContext.addPropertyAccessor(propertyAccessor); } evaluationContext.addPropertyAccessor(new MapAccessor()); for (Entry<String, Method> functionEntry : getFunctions().entrySet()) { evaluationContext.registerFunction(functionEntry.getKey(), functionEntry.getValue()); } return evaluationContext; }
/** * {@inheritDoc} */ @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { super.setBeanFactory(beanFactory); this.evaluationContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); if (beanFactory instanceof ConfigurableBeanFactory) { ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; this.evaluationContext.setTypeLocator(new StandardTypeLocator(configurableBeanFactory.getBeanClassLoader())); Optional.ofNullable(configurableBeanFactory.getConversionService()) .ifPresent(conversionService -> this.evaluationContext.setTypeConverter(new StandardTypeConverter(conversionService))); } }
/** * {@inheritDoc} */ @Override public void setBeanFactory(BeanFactory beanFactory) throws BeansException { super.setBeanFactory(beanFactory); this.evaluationContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); if (beanFactory instanceof ConfigurableBeanFactory) { ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; this.evaluationContext.setTypeLocator(new StandardTypeLocator(configurableBeanFactory.getBeanClassLoader())); Optional.ofNullable(configurableBeanFactory.getConversionService()) .ifPresent(conversionService -> this.evaluationContext.setTypeConverter(new StandardTypeConverter(conversionService))); } }
evaluationContext.setTypeLocator(new WhitelistTypeLocator()); evaluationContext.setMethodResolvers(Collections.singletonList(new FilteredMethodResolver())); evaluationContext.setPropertyAccessors(Arrays.asList(new MapPropertyAccessor(allowUnknownKeys), new FilteredPropertyAccessor()));
sec.addPropertyAccessor(new EnvironmentAccessor()); sec.setBeanResolver(new BeanFactoryResolver(evalContext.getBeanFactory())); sec.setTypeLocator(new StandardTypeLocator(evalContext.getBeanFactory().getBeanClassLoader())); ConversionService conversionService = evalContext.getBeanFactory().getConversionService(); if (conversionService != null) {
/** * Initializes the Spring Expression Language (SpEL) {@link EvaluationContext} used to parse property placeholder * and SpEL expressions in the Expiration annotation attribute values. */ protected void initEvaluationContext() { BeanFactory beanFactory = getBeanFactory(); if (EVALUATION_CONTEXT_REFERENCE.compareAndSet(null, newEvaluationContext())) { StandardEvaluationContext evaluationContext = EVALUATION_CONTEXT_REFERENCE.get(); evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); evaluationContext.addPropertyAccessor(new EnvironmentAccessor()); evaluationContext.addPropertyAccessor(new MapAccessor()); if (beanFactory instanceof ConfigurableBeanFactory) { ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; ConversionService conversionService = configurableBeanFactory.getConversionService(); if (conversionService != null) { evaluationContext.setTypeConverter(new StandardTypeConverter(conversionService)); } evaluationContext.setTypeLocator(new StandardTypeLocator(configurableBeanFactory.getBeanClassLoader())); } } EVALUATION_CONTEXT_REFERENCE.get().setBeanResolver(new BeanFactoryResolver(beanFactory)); }
/** * Initializes the Spring Expression Language (SpEL) {@link EvaluationContext} used to parse property placeholder * and SpEL expressions in the Expiration annotation attribute values. */ protected void initEvaluationContext() { BeanFactory beanFactory = getBeanFactory(); if (EVALUATION_CONTEXT_REFERENCE.compareAndSet(null, newEvaluationContext())) { StandardEvaluationContext evaluationContext = EVALUATION_CONTEXT_REFERENCE.get(); evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); evaluationContext.addPropertyAccessor(new EnvironmentAccessor()); evaluationContext.addPropertyAccessor(new MapAccessor()); if (beanFactory instanceof ConfigurableBeanFactory) { ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) beanFactory; ConversionService conversionService = configurableBeanFactory.getConversionService(); if (conversionService != null) { evaluationContext.setTypeConverter(new StandardTypeConverter(conversionService)); } evaluationContext.setTypeLocator(new StandardTypeLocator(configurableBeanFactory.getBeanClassLoader())); } } EVALUATION_CONTEXT_REFERENCE.get().setBeanResolver(new BeanFactoryResolver(beanFactory)); }
/** * Constructs, configures and initializes a new instance of an {@link EvaluationContext}. * * @param beanFactory reference to the Spring {@link BeanFactory}. * @return a new {@link EvaluationContext}. * @see org.springframework.beans.factory.BeanFactory * @see org.springframework.expression.EvaluationContext * @see #getBeanFactory() */ protected EvaluationContext newEvaluationContext(BeanFactory beanFactory) { StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); evaluationContext.addPropertyAccessor(new EnvironmentAccessor()); evaluationContext.addPropertyAccessor(new MapAccessor()); evaluationContext.setTypeLocator(new StandardTypeLocator(getBeanClassLoader())); configureTypeConverter(evaluationContext, beanFactory); return evaluationContext; }
/** * Constructs, configures and initializes a new instance of an {@link EvaluationContext}. * * @param beanFactory reference to the Spring {@link BeanFactory}. * @return a new {@link EvaluationContext}. * @see org.springframework.beans.factory.BeanFactory * @see org.springframework.expression.EvaluationContext * @see #getBeanFactory() */ protected EvaluationContext newEvaluationContext(BeanFactory beanFactory) { StandardEvaluationContext evaluationContext = new StandardEvaluationContext(); evaluationContext.addPropertyAccessor(new BeanFactoryAccessor()); evaluationContext.addPropertyAccessor(new EnvironmentAccessor()); evaluationContext.addPropertyAccessor(new MapAccessor()); evaluationContext.setTypeLocator(new StandardTypeLocator(getBeanClassLoader())); configureTypeConverter(evaluationContext, beanFactory); return evaluationContext; }
@PostConstruct public void init() { if (evalContext == null) { evalContext = new StandardEvaluationContext(); } if (evalContext instanceof StandardEvaluationContext) { StandardEvaluationContext standardEvalContext = (StandardEvaluationContext)evalContext; // PropertyAccessor used when the model is a BeanFactory. standardEvalContext.addPropertyAccessor(new BeanFactoryAccessor()); if (beanFactory != null) { if (standardEvalContext.getBeanResolver() == null) { standardEvalContext.setBeanResolver(new BeanFactoryResolver(beanFactory)); } if (standardEvalContext.getTypeLocator() == null) { standardEvalContext.setTypeLocator(new StandardTypeLocator(beanFactory.getBeanClassLoader())); } if (standardEvalContext.getTypeConverter() == null) { ConversionService conversionService = beanFactory.getConversionService(); if (conversionService != null) { standardEvalContext.setTypeConverter(new StandardTypeConverter(conversionService)); } } } } }
sec.addPropertyAccessor(new MapAccessor()); sec.setBeanResolver(new BeanFactoryResolver(beanEvaluationContext.getBeanFactory())); sec.setTypeLocator(new StandardTypeLocator(beanEvaluationContext.getBeanFactory().getBeanClassLoader())); ConversionService conversionService = beanEvaluationContext.getBeanFactory().getConversionService(); if (conversionService != null) {
sec.addPropertyAccessor(new MapAccessor()); sec.setBeanResolver(new BeanFactoryResolver(beanEvaluationContext.getBeanFactory())); sec.setTypeLocator(new StandardTypeLocator(beanEvaluationContext.getBeanFactory().getBeanClassLoader())); ConversionService conversionService = beanEvaluationContext.getBeanFactory().getConversionService(); if (conversionService != null) {