0

例外(Exceptionから拡張)をスローするメソッドを持つステートレスセッションBeanがあります。

@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) {...}はできません。これは、Exception のサブクラスではないエラーであるためです。あなたが本当にそれを捕まえたいのなら、catch (Throwable t) {...}私が強く思いとどまらせるを追加する必要があります. むしろ、スローされたエラーの理由を見つけてください。あなたのコードをもっと見る必要があると思います...

APIが言うように、「通常、このエラーはコンパイラによってキャッチされます。このエラーは、クラスの定義が互換性なく変更された場合にのみ実行時に発生する可能性があります」...サーバーとクライアントに再デプロイして、必ず同じものを使用しましたかインターフェイス定義?

于 2012-06-12T17:08:15.660 に答える