JSR223 Rhino抛出的ScriptException的合理处理
我开始遇到一个本来非常有用的 JSR223 脚本环境的肮脏小秘密。
我使用 Java 6 SE 附带的内置版本的 Rhino,通过 JSR223 的 ScriptingEngine 等访问它。
当我收到由导出到 Javascript 环境的 Java 对象引起的异常时,它是包装 sun.org.mozilla.javascript.internal.WrappedException
ScriptingException > 包装了我真正的异常(例如 UnsupportedOperationException
或其他)
ScriptingException
对于 getFileName() 返回 null,对于 getLineNumber() 返回 -1。 但是,当我查看消息和调试器时,WrappedException
具有正确的文件名和行号,它只是没有通过 ScriptingException 的 getter 方法发布它。
伟大的。 现在我该怎么办?我不知道如何使用 sun.org.mozilla.javascript.internal.wrappedException ,它无论如何都不是公共类。
I'm starting to run into the dirty little secrets of what is an otherwise very useful JSR223 scripting environment.
I'm using the builtin version of Rhino shipped with Java 6 SE, accessing it through JSR223's ScriptingEngine
et al.
When I get an exception caused by a Java object I've exported into the Javascript environment, it is a ScriptingException
that wraps a sun.org.mozilla.javascript.internal.WrappedException
that wraps my real exception (e.g. UnsupportedOperationException
or whatever)
The ScriptingException
returns null for getFileName() and -1 for getLineNumber().
But when I look at the message and at the debugger, the WrappedException
has the correct filename and line number, it's just not publishing it via the ScriptingException's getter methods.
Great. Now what do I do? I don't know how I'm going to use sun.org.mozilla.javascript.internal.wrappedException which isn't a public class anyway.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
啊。 Java 6 的 Rhino 使用
sun.org.mozilla.javascript.internal.EvaluatorException
做了同样的事情(不通过 ScriptingException 的方法发布文件名/行号/等),谁知道还有多少其他异常。我能想到的处理这个问题的唯一合理方法是使用反射。这是我的解决方案。
Argh. Java 6's Rhino does the same thing (doesn't publish the file name / line number / etc via ScriptingException's methods) with
sun.org.mozilla.javascript.internal.EvaluatorException
and who knows how many other exceptions.The only reasonable way I can think of to handle this is to use reflection. Here's my solution.