小编Dav*_*e H的帖子

如何使用JSR-223访问导致ScriptException的Java异常

我正在使用JRE6内置的JSR-223脚本引擎执行Javascripts.Javascripts能够访问Java代码和对象.当从JavaScript执行的Java代码抛出异常时,ScriptEngine将抛出ScriptException.

我希望能够访问导致Javascript抛出异常的Java异常.

从Javascript,我可以捕获异常并查看异常的javaException字段:

try
{
  .
}
catch (e)
{
  e.javaException.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有Javascript的控制权,只能从ScriptEngine执行它们.有没有办法从ScriptException中获取"内部"Java异常?

我相信如果我使用Rhino,RhinoException会有一个Java异常可用.JSR-223 API不提供RhinoException.

javascript java jsr223

7
推荐指数
1
解决办法
3790
查看次数

Java:声明可以抛出异常的接口方法的正确方法是什么?

假设我有这个由多个供应商实现的接口A:

interface A
{
    void x();
    void y();
}
Run Code Online (Sandbox Code Playgroud)

但是,我希望供应商能够抛出异常来发出信号失败的信号,并且可能会抛出一个方法RuntimeException.在每种情况下,调用这些方法的代码都应该处理失败并继续.仅仅因为1个供应商抛出NPE,我不希望系统崩溃.我想通过将每个方法声明为:来确保每个调用都能捕获所有异常,而不是将其留给调用方法的人(或者真正的维护方式).

void x() throws Exception;
Run Code Online (Sandbox Code Playgroud)

但这通常是不好的做法(PMD不喜欢它,一般我同意具体方法的规则),所以我想这是规则的例外还是有更好的方法?

让我说清楚,我正在寻找一种解决方案,其中接口的调用者被迫处理所有异常(包括RuntimeExceptions).

为了进一步详细说明我的环境,所有这些都在OSGi框架内运行.因此,每个供应商将其代码打包在一个捆绑包中,OSGi将处理所有异常以防止整个系统崩溃.我真正关注的是OSGi服务接口,它将被某些核心捆绑包调用.我想要确定的是,当我遍历所有服务时,一个服务不会抛出NPE并停止正在执行的进程.我希望通过捕获从服务抛出的所有异常来更优雅地处理它,以便仍然管理其他提供的服务.

java osgi exception-handling

5
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×2

exception-handling ×1

javascript ×1

jsr223 ×1

osgi ×1