1

我们目前正在构建自己的产品和框架。我们有一个规则引擎,它在内部使用 MVEL API 来评估表达式。

最近我们遇到一个问题

假设我有一个“规则”,有很多嵌套的条件。

( A && ( B && ( C && ( D && ( E && F ) ) ) )

假设我有更多像上面那样的表达。而不是 A、B、C 等,我有 ognl 之类的 (A -> contextObjectLoanApplication.Customer.personinfo.age)

如果我编译这个表达式,编译一个表达式大约需要 3-4 小时。有没有办法让我可以在解析器或上下文中设置任何内容,而 MVEL 以更优化的方式处理它。

我们几乎被困在这里,要么我们可能需要更改生成这个表达式的整个 API,然后编译。

所以只是好奇 MVEL 是否可以处理这个问题。

谢谢

4

2 回答 2

1

MVEL 的解析器是幼稚的或损坏的,并且在相对于括号深度的指数时间内解析此类表达式:

(A && (B && (C && (D && (E && F)))))

除非他们修复解析器,否则您无能为力,这是不太可能的。

以下嵌套表达式也以指数方式解析:

(A ? B : (C ? D : (E ? F : (G ? H : (I ? J : K)))))

(从 MVEL 2.1.7 开始)

于 2014-01-28T15:19:34.003 回答
0

问题已在 MVEL-301 中打开

于 2014-03-19T15:12:12.817 回答