private Object evaluate (Object aValue, Context aContext) {
    StandardEvaluationContext context = createEvaluationContext(aContext);
    if(aValue instanceof String) {
      Expression expr = parser.parseExpression((String)aValue,new TemplateParserContext(PREFIX,SUFFIX));
      if(expr instanceof CompositeStringExpression) { // attempt partial evaluation
        StringBuilder value = new StringBuilder();
        Expression[] subExpressions = ((CompositeStringExpression) expr).getExpressions();
        for(Expression subExpression : subExpressions) {
          if(subExpression instanceof LiteralExpression) {
            value.append(subExpression.getValue());
          }
          else if (subExpression instanceof SpelExpression) {
             value.append(evaluate(PREFIX + subExpression.getExpressionString() + SUFFIX, aContext));
          }
          else {
            throw new IllegalArgumentException("unknown expression type: " + subExpression.getClass().getName());
          }
        }
        return value.toString();
      }
      else {
        try {
          return(expr.getValue(context));
        }
        catch (SpelEvaluationException e) {
          if(logger.isTraceEnabled()) {
            logger.trace(e.getMessage());
          }
          return aValue;
        }
      }
    }
    else if (aValue instanceof List) {
      List<Object> evaluatedlist = new ArrayList<>();
      List<?> list = (List<?>) aValue;
      for(Object item : list) {
        evaluatedlist.add(evaluate(item, aContext));
      }
      return evaluatedlist;
    }
    else if (aValue instanceof Map) {
      @SuppressWarnings("unchecked")
      Map<String, Object> value = (Map<String, Object>) aValue;
      return evaluateInternal(value, aContext);
    }
    return aValue;
  }
a {@link TaskEvaluator} implemenation which is based on 
Spring Expression Language for resolving expressions.

@author Arik Cohen
@since Mar 31, 2017
src/main/java/com/creactiviti/piper/core/task/SpelTaskEvaluator.java