- - PR -
webサービスのclient側でExceptionを判別する場合
1
| 投稿者 | 投稿内容 | ||||
|---|---|---|---|---|---|
|
投稿日時: 2004-06-08 19:45
こんにちは。 webサービスでの例外処理を考える際に以下の部分で疑問が 発生してしまいました。もしご経験されたなどお気づきの点が ありましたらご教授ください。 サーバ側のSessionEJBをAxisにてwebサービスで公開した際 にj2eeシステムレベルの例外ではなくビジネスロジックレベル の例外(例えばユーザID登録でユーザ2重登録例外など)を処理 する方法を考えていたのですが、 例えば現在 <<<SessionEJBのメソッド>>> public abstract class UserManagerBean implements SessionBean { public void registUser(userDataModel dataModel) { try{ ユーザ登録処理(2重登録時にUserExceptionを送出) } catch (UserException e) { throw (EJBException) new EJBException().initCause(e); } } } サーバ側処理をこの様にコーディングし、 (サービスのプロキシはwsdd->wsdl->antのaxis-wsdl2javaで作成) クライアント側でwebサービスをコールしました public void userControl() { try { UserManagerLocalService service = new UserManagerLocalServiceLocator(); UserManagerLocal xxxService = service.getUserService(); xxxService.registUser(new UserDataModel()); } catch (RemoteException e) { Exception c1 = (Exception)e.getCause(); Exception c2 = (Exception)c1.getCause(); ☆☆☆ここでc1もしくはc2を判定したかった☆☆☆ } catch (ServiceException e) { 省略 } } ここでデバッグをしてみたのですが☆の部分でExceptionを判定して クライアント側例外処理を行いたかったのですがc1がnullになって しまいます。 ※ちなみにサーバ側でEJBExceptionとしたのは正しくロールバック される事を期待した為です。 もし何かお気づきの点や良い参考資料などがございましたらご教授 いただけないでしょうか?よろしくお願いいたします。 | ||||
|
投稿日時: 2004-06-08 20:32
サーバ側で例外が発生した場合、クライアント側で発生するExceptionはAxisFaultです。 通常はサーバ側で例外が特定できる情報をAxisFaultに設定(例えばfaultCode)して返し、 クライアント側ではそれを取り出すことによって例外を特定するようにします。 とりあえず今のコードのまま、faultCodeなどがどう設定されているか試してみたらどうでしょうか。 | ||||
|
投稿日時: 2004-06-09 18:18
ukさんこんにちは。 AxisFaultなのですね。wsdl2javaで自動生成されるクライアント 用のサーバプロキシコードから返されるExceptionがRemoteException とServiceExceptionだったのでAxisFaultにたどり着きませんでした。 ありがとうございます。 ちなみにTCP monitorで見たところFaultCodeは 「soapenv:Server.userException」 となっていました。 コンテナはjbossなのですがSessionEJBがどのパターンでFaultCode を生成するかを調べれば良いのでしょうか?本日一日中これについて調 べていたのですが今のところ動きが見えてきません。 なにか良いサイトなどをごぞんじでしたらご教授ください。よろしく お願いいたします。 | ||||
1
