gpt4 book ai didi

java - 捕获 JEXL 中自定义函数抛出的异常

转载 作者:行者123 更新时间:2023-12-01 13:50:08 24 4
gpt4 key购买 nike

我向 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,解释器不会将其传播给我,而是抛出一个通用的JEXLException。有没有办法捕获自定义函数的异常?我用apache commons JEXL为此的引擎,它在我的项目中用作库 jar。

最佳答案

经过一番调查,我找到了一个简单的解决方案!

当自定义函数中抛出异常时,JEXL将抛出通用的JEXLException。然而,它巧妙地将原始异常包装在 JEXLException 中,因为它是特别的原因。因此,如果我们想捕捉原始内容,我们可以这样写:

try {
String questionId = (String) mExpression.evaluate(mJexlContext);
} catch (JexlException e) {
Exception original = e.getCause();
// do something with the original
}

关于java - 捕获 JEXL 中自定义函数抛出的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20030241/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com