/** * Gets spring expression parser. * * @return the spring expression parser */ protected SpringELExpressionParser getSpringExpressionParser() { final SpelParserConfiguration configuration = new SpelParserConfiguration(); final SpelExpressionParser spelExpressionParser = new SpelExpressionParser(configuration); final SpringELExpressionParser parser = new SpringELExpressionParser(spelExpressionParser, this.flowBuilderServices.getConversionService()); parser.addPropertyAccessor(new ActionPropertyAccessor()); parser.addPropertyAccessor(new BeanFactoryPropertyAccessor()); parser.addPropertyAccessor(new FlowVariablePropertyAccessor()); parser.addPropertyAccessor(new MapAdaptablePropertyAccessor()); parser.addPropertyAccessor(new MessageSourcePropertyAccessor()); parser.addPropertyAccessor(new ScopeSearchingPropertyAccessor()); parser.addPropertyAccessor(new BeanExpressionContextAccessor()); parser.addPropertyAccessor(new MapAccessor()); parser.addPropertyAccessor(new MapAdaptablePropertyAccessor()); parser.addPropertyAccessor(new EnvironmentAccessor()); parser.addPropertyAccessor(new ReflectivePropertyAccessor()); return parser; }
@Override public String evaluateTemplate(String expressionTemplate, Map<String, Object> evaluationContext) { Optional.ofNullable(expressionTemplate) .filter(template -> !template.isEmpty()) .orElseThrow(() -> new IllegalArgumentException("Expression template cannot be null or empty")); Optional.ofNullable(evaluationContext) .orElseThrow(() -> new IllegalArgumentException("Evaluation context cannot be null")); Expression expression = new SpelExpressionParser().parseExpression(expressionTemplate ,new TemplateParserContext("@{","}")); StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext(); try { standardEvaluationContext.registerFunction("urlEncode", Functions.class.getDeclaredMethod("urlEncode", new Class[] {String.class})); } catch (NoSuchMethodException e) { throw new EvaluationException("Fail to register function to evaluation context", e); } standardEvaluationContext.addPropertyAccessor(new MapAccessor()); standardEvaluationContext.setVariables(evaluationContext); return expression.getValue(standardEvaluationContext,String.class); }
@Override public boolean evaluateConditional(String conditionalExpression, Map<String, Object> evaluationContext) { Optional.ofNullable(conditionalExpression) .filter(template -> !template.isEmpty()) .orElseThrow(() -> new IllegalArgumentException("Conditional expression cannot be null or empty")); Optional.ofNullable(evaluationContext) .orElseThrow(() -> new IllegalArgumentException("Evaluation context cannot be null")); Expression expression = new SpelExpressionParser().parseExpression(conditionalExpression); StandardEvaluationContext standardEvaluationContext = new StandardEvaluationContext(); standardEvaluationContext.addPropertyAccessor(new MapAccessor()); standardEvaluationContext.setVariables(evaluationContext); return expression.getValue(standardEvaluationContext,Boolean.class); }
@Override protected Mono<Void> doNotify(InstanceEvent event, Instance instance) { Map<String, Object> root = new HashMap<>(); root.put("event", event); root.put("instance", instance); root.put("lastStatus", getLastStatus(event.getInstance())); StandardEvaluationContext context = new StandardEvaluationContext(root); context.addPropertyAccessor(new MapAccessor()); SimpleMailMessage message = new SimpleMailMessage(); message.setTo(to); message.setFrom(from); message.setSubject(subject.getValue(context, String.class)); message.setText(text.getValue(context, String.class)); message.setCc(cc); return Mono.fromRunnable(() -> sender.send(message)); }
/** * 创建SpEL执行上下文 * * @param rootObject * SpEL表达式根对象 * @param context * Beetl上下文对象 * @return SpEL表达式执行上下文 */ private EvaluationContext createEvaluationContext(Object rootObject, Context beetlContext) { StandardEvaluationContext context = new StandardEvaluationContext(rootObject); // 允许使用#context访问Beetl上下文 context.setVariable("context", beetlContext); // 允许使用#global访问Beetl上下文的全局变量 context.setVariable("global", beetlContext.globalVar); // 注册WebRender定义的全局变量 context.setVariable("ctxPath", beetlContext.getGlobal("ctxPath")); context.setVariable("servlet", beetlContext.getGlobal("servlet")); context.setVariable("parameter", beetlContext.getGlobal("parameter")); context.setVariable("request", beetlContext.getGlobal("request")); context.setVariable("session", beetlContext.getGlobal("session")); // 允许使用属性格式访问Map context.addPropertyAccessor(new MapAccessor()); // 允许访问Spring容器Bean context.setBeanResolver(new BeanFactoryResolver(applicationContext)); return context; }
private EvaluationContext createEvaluationContext(PageContext pageContext) { StandardEvaluationContext context = new StandardEvaluationContext(); context.addPropertyAccessor(new JspPropertyAccessor(pageContext)); context.addPropertyAccessor(new MapAccessor()); context.addPropertyAccessor(new EnvironmentAccessor()); context.setBeanResolver(new BeanFactoryResolver(getRequestContext().getWebApplicationContext())); ConversionService conversionService = getConversionService(pageContext); if (conversionService != null) { context.setTypeConverter(new StandardTypeConverter(conversionService)); } return context; }
public SpelView(String template) { this.template = template; this.prefix = new RandomValueStringGenerator().generate() + "{"; this.context.addPropertyAccessor(new MapAccessor()); this.resolver = new PropertyPlaceholderHelper.PlaceholderResolver() { public String resolvePlaceholder(String name) { Expression expression = parser.parseExpression(name); Object value = expression.getValue(context); return value == null ? null : value.toString(); } }; }
@Test @Ignore("Work in progress") public void testExpressionLists() throws Exception { TargetWithNestedMapOfListOfString target = new TargetWithNestedMapOfListOfString(); LinkedHashMap<String, List<String>> map = new LinkedHashMap<String, List<String>>(); // map.put("foo", Arrays.asList("bar")); target.setNested(map); SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(target); context.addPropertyAccessor(new MapAccessor()); Expression expression = parser.parseExpression("nested.foo"); assertThat(expression.getValue(context)).isNotNull(); }
@Override public MailMessage create(MailTemplate mailTemplate, MailSource source) { MailMessageImpl.Builder b = MailMessageImpl.builder(); final StandardEvaluationContext ctx = new StandardEvaluationContext(source.getVariables()); ctx.addPropertyAccessor(new MapAccessor()); UnaryOperator<Object> processor = (o) -> MailTemplateUtils.process((s) -> evaluate(ctx, s), o); b.setHead(MailHeadImpl.builder().from(mailTemplate.getHeadSource(), processor).build()); MailPartTemplate bs = mailTemplate.getBodySource(); String bodyText = (String) evaluate(ctx, bs.getData()); b.setBody(new MailTextBody(bodyText, bs.getMime())); return b.build(); }
@Test @Ignore("Work in progress") public void testExpressionLists() throws Exception { TargetWithNestedMapOfListOfString target = new TargetWithNestedMapOfListOfString(); LinkedHashMap<String, List<String>> map = new LinkedHashMap<String, List<String>>(); // map.put("foo", Arrays.asList("bar")); target.setNested(map); SpelExpressionParser parser = new SpelExpressionParser(); StandardEvaluationContext context = new StandardEvaluationContext(target); context.addPropertyAccessor(new MapAccessor()); Expression expression = parser.parseExpression("nested.foo"); assertNotNull(expression.getValue(context)); }
@Override public StandardEvaluationContext createContext(String sName, Object sValue, StandardEvaluationContext sContext) { StandardEvaluationContext aContext = sContext; if (sContext == null) { aContext = new StandardEvaluationContext(); if (commonObjects != null) { aContext.setVariables(commonObjects); } aContext.addPropertyAccessor(new MapAccessor()); } aContext.setVariable(sName, sValue); return aContext; }
protected String getText(InstanceEvent event, Instance instance) { Map<String, Object> root = new HashMap<>(); root.put("event", event); root.put("instance", instance); root.put("lastStatus", getLastStatus(event.getInstance())); StandardEvaluationContext context = new StandardEvaluationContext(root); context.addPropertyAccessor(new MapAccessor()); return message.getValue(context, String.class); }
protected String getMessage(InstanceEvent event, Instance instance) { Map<String, Object> root = new HashMap<>(); root.put("event", event); root.put("instance", instance); root.put("lastStatus", getLastStatus(event.getInstance())); StandardEvaluationContext context = new StandardEvaluationContext(root); context.addPropertyAccessor(new MapAccessor()); return description.getValue(context, String.class); }
public SpelView(String template) { this.template = template; this.context.addPropertyAccessor(new MapAccessor()); this.helper = new PropertyPlaceholderHelper("${", "}"); this.resolver = new PlaceholderResolver() { public String resolvePlaceholder(String name) { Expression expression = parser.parseExpression(name); Object value = expression.getValue(context); return value==null ? null : value.toString(); } }; }
private EvaluationContext getContext(Map<String, ?> map) { StandardEvaluationContext context = new StandardEvaluationContext(); context.addPropertyAccessor(new MapAccessor()); context.setRootObject(map); return context; }
SpelView(String template) { this.template = template; this.context.addPropertyAccessor(new MapAccessor()); this.helper = new PropertyPlaceholderHelper("${", "}"); this.resolver = new SpelPlaceholderResolver(this.context); }
/** * Creates a new instance with {@link StandardEvaluationContext} including * {@link org.springframework.expression.spel.support.ReflectivePropertyAccessor ReflectivePropertyAccessor} * and {@link MapAccessor}. */ public SpelMessageInterpolator() { StandardEvaluationContext ctx = new StandardEvaluationContext(); ctx.addPropertyAccessor(new MapAccessor()); this.evalContext = ctx; }
public ElementConfiguration parseProperty(Object value) { LOGGER.debug("value : " + value); if (value instanceof TypedStringValue) { TypedStringValue stringValue = (TypedStringValue) value; if (stringValue.getTargetTypeName() != null) { return getEnumObjectConfiguration(stringValue); } else { PrimitiveConfiguration primitiveConfiguration = objectConfigurationFactory .createPrimitiveConfiguration(); if (useSPEL(stringValue)) { ExpressionParser parser = new SpelExpressionParser(); String expAsStringWithToken = stringValue.getValue().trim(); String expAsString = expAsStringWithToken.substring(2, expAsStringWithToken.length() - 1).trim(); LOGGER.trace("This property is a SPEL expression: " + expAsString); // String regex = "systemProperties\\['([^\\s]+)'\\]"; Expression exp = parser.parseExpression(expAsString); StandardEvaluationContext sec = null; if (sec == null) { sec = new StandardEvaluationContext(); sec.addPropertyAccessor(new EnvironmentAccessor()); sec.addPropertyAccessor(new BeanExpressionContextAccessor()); sec.addPropertyAccessor(new BeanFactoryAccessor()); sec.addPropertyAccessor(new MapAccessor()); } primitiveConfiguration.setValue(String.valueOf(exp.getValue())); } else { LOGGER.trace("This property is NOT a SPEL expression: " + stringValue.getValue()); primitiveConfiguration.setValue(stringValue.getValue()); } return primitiveConfiguration; } } else if (value instanceof RuntimeBeanReference) { RuntimeBeanReference beanReference = (RuntimeBeanReference) value; ReferenceConfiguration referenceConfiguration = objectConfigurationFactory.createReferenceConfiguration(); referenceConfiguration.setReferenceName(beanReference.getBeanName()); return referenceConfiguration; } else if (value instanceof ManagedList<?>) { return parseValueList((ManagedList<?>) value); } else if (value instanceof ManagedMap<?, ?>) { return parseValueMap((ManagedMap<?, ?>) value); } else if (value instanceof BeanDefinitionHolder) { BeanDefinitionHolder beanDefinitionHolder = (BeanDefinitionHolder) value; return parseBeanDefinition(beanDefinitionHolder.getBeanDefinition()); } else { throw new UnsupportedOperationException("The type of property value is not suppported : " + value + " (class : " + value.getClass().getName() + ")"); } }