ScriptEngineManager получить последнюю успешную строку - PullRequest
0 голосов
/ 25 сентября 2019

Я использую ScriptEngineManager в своем приложении Grails для выполнения кода JavaScript.

Когда я выполняю этот javascript:

var x = new java.util.ArrayList([1, 2, 3]) 
log(x[55])

С этим кодом:

try {
    ScriptEngineManager manager = new ScriptEngineManager();
    ScriptEngine engine = manager.getEngineByName("javascript")
    return engine.eval(javascript)
} catch (ScriptException jsEx) {
    // Exception is added in outer function to the log
    throw new JavascriptException(jsEx.getMessage(), jsEx)
} catch (Exception e) {
    throw new JavascriptException("UNEXPECTED Exception in invokeJavaScript " + e.getMessage(), e)
}

я получаю java.lang.IndexOutOufBoundsException в Excpetion e.Это нормально, но я хочу знать, в какой строке в javascript произошла ошибка.Есть ли возможность получить последнюю успешную строку из кода javascript?

1 Ответ

0 голосов
/ 26 сентября 2019

Я нашел обходной путь для моей проблемы.Я анализирую трассировку стека исключительной ситуации, чтобы получить номер строки:

//this method gives me the stacktrace as string
String trace = helperService.stacktraceToString(e)
String line = ""
trace.eachLine {
    if (it.contains("<eval>")) {
        line = " at line " + it.substring(it.lastIndexOf("<eval>:"), it.length() -1).replace("<eval>:", "")
    }
}
...