Rhino плохо поддерживает Исключения, они не так полезны и полезны, как в других скриптовых движках, таких как Groovy или JRuby.
Чтобы помочь вам отладить проблемы, я думаю, вы можете использовать этот трюк.Rhino добавляет нестандартное свойство к объекту Error, к которому вы можете получить доступ, чтобы распечатать некоторую информацию об ошибке.
try {
someCode()
}
catch(e) {
if(e.rhinoException != null)
{
e.rhinoException.printStackTrace();
}
}
Вы также можете использовать привязки, чтобы указать, что что-то пошло не так?
Я понимаю, что вы ищете сейчас.Это не красиво, на самом деле это ужасно, но вы можете получить доступ к лежащему в основе 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");
}
}