Java 如何禁用JEXL分配?

Java 如何禁用JEXL分配?,java,variable-assignment,jexl,Java,Variable Assignment,Jexl,我有一个允许用户输入表达式的应用程序。它们被用作搜索过滤器。用户经常犯的一个错误是编写类似“A=5”的代码,并期望当且仅当变量A包含值5时过滤器为真 是的,您是对的:=运算符是赋值,用户应该使用==进行比较。 类似于拒绝与正则表达式[^=]=[^=]匹配的表达式这样的解决方法也不允许比较A==“foo=bar”这样的字符串,因此这不是解决方案 是否有机会通过运行时配置从JetEngine中删除赋值运算符,以便它在解析期间引发异常?或者发现JexlExpression包含赋值?,因此jexlapi

我有一个允许用户输入表达式的应用程序。它们被用作搜索过滤器。用户经常犯的一个错误是编写类似“A=5”的代码,并期望当且仅当变量A包含值5时过滤器为真

是的,您是对的:=运算符是赋值,用户应该使用==进行比较。 类似于拒绝与正则表达式[^=]=[^=]匹配的表达式这样的解决方法也不允许比较A==“foo=bar”这样的字符串,因此这不是解决方案


是否有机会通过运行时配置从JetEngine中删除赋值运算符,以便它在解析期间引发异常?或者发现JexlExpression包含赋值?

,因此jexlapi似乎不提供对语法树或定义允许的运算符的任何访问。到目前为止,帮助我的是修改了的实现


通过重写set方法来抛出异常,至少在运行时我会得到一个错误。我仍然希望在解析表达式时出现错误,但这可以节省时间。

如果您可以使用JEXL 3.2 trunk(即从源代码构建),可以通过“功能”通过禁用副作用和全局副作用来实现这一点

JexlFeatures features = new JexlFeatures().sideEffect(false).sideEffectGlobal(false);
...
JexlInfo info = ...
JexlScript script = jexl.createScript(features, info, source);
...

createScript将抛出一个jexException.Feature,指示语法功能已禁用。

似乎存在一些内部语法树。如何访问它?一旦它稳定了,我会试试看。但是谢谢你提到。