class SpELAction implements Action {

    private static final Logger LOGGER = LoggerFactory.getLogger(SpELAction.class);

    private final ExpressionParser parser = new SpelExpressionParser();
    private final String expression;
    private final Expression compiledExpression;
    private BeanResolver beanResolver;

    /**
     * Create a new {@link SpELAction}.
     *
     * @param expression the action written in expression language
     */
    public SpELAction(String expression) {
        this(expression, ParserContext.TEMPLATE_EXPRESSION);
    }

    /**
     * Create a new {@link SpELAction}.
     *
     * @param expression    the action written in expression language
     * @param beanResolver  the bean resolver used to resolve bean references
     */
    public SpELAction(String expression, BeanResolver beanResolver) {
        this(expression, ParserContext.TEMPLATE_EXPRESSION, beanResolver);
    }

    /**
     * Create a new {@link SpELAction}.
     *
     * @param expression the action written in expression language
     * @param parserContext the SpEL parser context
     */
    public SpELAction(String expression, ParserContext parserContext) {
        this.expression = expression;
        compiledExpression = parser.parseExpression(expression, parserContext);
    }

    /**
     * Create a new {@link SpELAction}.
     *
     * @param expression    the action written in expression language
     * @param beanResolver  the bean resolver used to resolve bean references
     * @param parserContext the SpEL parser context
     */
    public SpELAction(String expression, ParserContext parserContext, BeanResolver beanResolver) {
        this.expression = expression;
        this.beanResolver = beanResolver;
        compiledExpression = parser.parseExpression(expression, parserContext);
    }

    @Override
    public void execute(Facts facts) {<FILL_FUNCTION_BODY>}
}

        try {
            StandardEvaluationContext context = new StandardEvaluationContext();
            context.setRootObject(facts.asMap());
            context.setVariables(facts.asMap());
            if (beanResolver != null) {
                context.setBeanResolver(beanResolver);
            }
            compiledExpression.getValue(context);
        } catch (Exception e) {
            LOGGER.error("Unable to evaluate expression: '" + expression + "' on facts: " + facts, e);
            throw e;
        }
    
<no_super_class>