Проверить выражение MVEL в java

Пользователь введет некоторую формулу/выражение.

Я хочу проверить, правильна ли формула/выражение, которое является строковым вводом для моей функции (согласно стандарту MVEL), или нет.

Ниже приведено допустимое выражение,

String validFormula = "if(dueDate > "2015-12-12") {a*b} else {a+b}";

Ниже приведено неверное выражение,

String invalidFormula = "if(dueDate > 2015-12-12) {a*b} else {a+b}";
 //Quotes are missing for date

Ниже приведен фрагмент кода,

public Formula save(String formula)
{
    // want to call MVEL api to check if formula/expression is valid or not
    ...
}

Есть ли какой-либо API, предоставляемый MVEL, который принимает выражение String и возвращает логическое значение/выдает исключение, если выражение неверно?


person Prashant Shilimkar    schedule 11.12.2015    source источник
comment
Если вы оцениваете неправильное выражение с помощью MVEL, будет выдано только исключение.   -  person Ankur Singhal    schedule 11.12.2015
comment
Здесь я пытаюсь просто сохранить выражение. Оценка происходит в другой транзакции. Я хочу убедиться, что когда пользователь сохраняет выражение, которое должно быть проверено.   -  person Prashant Shilimkar    schedule 11.12.2015


Ответы (1)


вы можете проверить выражение, используя

Serializable compiledFormula = MVEL.compileExpression(validFormula);
Serializable compiledFormula = MVEL.compileExpression(invalidFormula);

Это приводит к org.mvel2.CompileException, если недействительно.

Это работает с mvel 2.2.6, не может гарантировать совместимость API или функциональность со старыми версиями библиотеки.

Также обратите внимание, что в вашем случае оба выражения будут действительными, поскольку MVEL не знает тип данных переменной duedate, который будет известен только во время выполнения, когда вы фактически выполняете выражение. Надеюсь это поможет...

person 302Found    schedule 11.12.2015