Rhino 对异常的支持确实很差,它们不像 Groovy 或 JRuby 等其他脚本引擎那样有用或有用。
为了帮助您调试问题,我认为您可以使用此技巧。Rhino 为错误对象添加了一个非标准属性,您可以访问该属性以打印出有关错误的一些信息。
try {
someCode()
}
catch(e) {
if(e.rhinoException != null)
{
e.rhinoException.printStackTrace();
}
}
您还可以使用 Bindings 来指示出现问题?
我明白你现在在寻找什么。它并不漂亮,实际上它很糟糕,但是你可以访问底层的 JavaScriptException,然后获取你抛出异常的值。
package test;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import sun.org.mozilla.javascript.*;
public class Main {
private static ScriptEngineManager mgr = new ScriptEngineManager();
private static ScriptEngine engine = mgr.getEngineByName("JavaScript");
public static void main(String... args) {
System.out.println("START");
try {
engine.eval("throw { error: \"cheese\", context: \"payload\" };");
} catch (ScriptException e) {
JavaScriptException jse = (JavaScriptException)e.getCause();
Object obj = jse.getValue();
ScriptableObject so = (ScriptableObject)obj;
System.out.println(so.get("error", so));
System.out.println(so.get("context", so));
}
System.out.println("END");
}
}