我在 JEXL 引擎中添加了一些可以在 JEXL 表达式中使用的函数:
Map<String, Object> functions = new HashMap<String, Object>();
mFunctions = new ConstraintFunctions();
functions.put(null, mFunctions);
mEngine.setFunctions(functions);
但是,某些函数可能会引发异常,例如:
public String chosen(String questionId) throws NoAnswerException {
Question<?> question = mQuestionMap.get(questionId);
SingleSelectAnswer<?> answer = (SingleSelectAnswer<?>) question.getAnswer();
if (answer == null) {
throw new NoAnswerException(question);
}
return answer.getValue().getId();
}
当我解释一个表达式时调用自定义函数。表达式当然包含对此函数的调用:
String expression = "chosen('qID')";
Expression jexl = mEngine.createExpression(expression);
String questionId = (String) mExpression.evaluate(mJexlContext);
不幸的是,当这个函数在解释过程中被调用时,如果它抛出NoAnswerException
,解释器不会将它传给我,而是抛出一个 general JEXLException
。有没有办法从自定义函数中捕获异常?我为此使用了apache commons JEXL引擎,它在我的项目中用作库 jar。