0

我有一个无状态会话 bean,它的方法会引发异常(从 Exception 扩展)。

@Stateless
@LocalBean
public class MyBean {
    ...
    public void myMethod() throws MyException {
        ...
    }
}

但我无法捕捉到异常。

try {
    myBean.myMethod
} catch (MyException e) {
    ...
}

这是堆栈: WARNING: StandardWrapperValve[MyServlet]: PWC1406: Servlet.service() for servlet MyServlet threw exception java.lang.IllegalAccessError: example/MyException at $Proxy327.myMethod(Unknown Source) at example.EJB31_Generated_MyBean_Intf_Bean_.myMethod(Unknown Source) at example.MyServlet.processRequest(MyServlet.java:36) at example.MyServlet.doGet(MyServlet.java:71) ...

我认为,这是因为调用 bean 方法是通过代理。我怎样才能捕捉到异常?或者应该避免在会话 bean 中抛出异常的方法?- 我希望不是。

4

1 回答 1

1

正如堆栈跟踪所示,它实际上是一个抛出的 IllegalAccessError ......请参阅其 API 文档:http ://docs.oracle.com/javase/6/docs/api/java/lang/IllegalAccessError.html

您将无法通过添加catch (Exception e) {...}...来捕获它,因为它是一个错误,它不是异常的子类。如果你真的想抓住它,你必须添加一个catch (Throwable t) {...}我非常不鼓励的。而是找到引发错误的原因。我认为我们需要查看更多您的代码...

正如 API 所说“通常,编译器会捕获此错误;如果类的定义发生了不兼容的更改,则此错误只会在运行时发生”...您是否在服务器和客户端上重新部署以确保使用相同接口定义?

于 2012-06-12T17:08:15.660 回答