ScriptEngineManager 获得最后成功的行
ScriptEngineManager get last successful line
我在我的 grails 应用程序中使用 ScriptEngineManager 来执行 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)
}
我在 Excpetion e 中得到 java.lang.IndexOutOufBoundsException
。这没关系,但我想知道 javascript 中的哪一行发生了错误。
是否有可能从 javascript 代码中获取最后一行成功?
我找到了解决问题的方法。我解析了异常的堆栈跟踪,所以我得到了行号:
//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>:", "")
}
}
我在我的 grails 应用程序中使用 ScriptEngineManager 来执行 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)
}
我在 Excpetion e 中得到 java.lang.IndexOutOufBoundsException
。这没关系,但我想知道 javascript 中的哪一行发生了错误。
是否有可能从 javascript 代码中获取最后一行成功?
我找到了解决问题的方法。我解析了异常的堆栈跟踪,所以我得到了行号:
//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>:", "")
}
}