JEXL:如何解析递归表达式

时间:2018-03-11 20:46:33

标签: java jexl

有一个JEXL表达式,我如何解析它以便动态地将所有涉及的变量添加到JEXL上下文?

示例:初始表达式:

Initial Expression = $VAR1 + $VAR2

VAR1和VAR2是其他表达式

$VAR1 = 123 + 45
$VAR2 = 67 + 89

更多VAR1可以有另一个深度级别:

$VAR1 = 123 + 45 + $VAR3

所以,在评估初始表达式之前,我需要添加到上下文VAR1和VAR2以及VAR3中,我该如何以动态的方式进行?

可以使用JEXL解析器吗?或者通过捕获JEXL例外?你能提供一个例子吗?

此致

1 个答案:

答案 0 :(得分:0)

您根本不需要担心。 JEXL处理它。

但是,首先,您应该使用脚本评估程序,而不是表达式评估程序。脚本评估器可以很好地处理多个语句,并支持复杂的循环语法。

请参阅install SSH

  

<强> JexlScript

     

这些允许您使用多个语句,您可以使用变量   任务,循环,计算等。或多或少可以   在Shell或JavaScript的基础级别实现。结果来自   从脚本返回最后一个命令。

     

<强> JxltEngine.Expression

     

这些是生成“单行”文本的理想选择,就像'toString()'一样   类固醇。要进行计算,请使用类似EL的语法   $ {} someVariable。括号之间的表达式表现出来   像一个JexlScript,而不是表达。你可以用分号来   执行多个命令,最后一个命令的结果是   从脚本返回。您还可以使用2次传球   使用#{someScript}语法进行评估。

现在,请尝试以下:

String script =     
            "var var1 = 123 + 45;"
        +   "var var2 = 67 + 89;"
        +   "var var = var1 + var2;"
        +   "return var;";

JexlContext jexlContext = new MapContext();

JexlEngine jexlEngine=new JexlBuilder().create();

System.out.println(jexlEngine.createScript(script).execute(jexlContext); // 134