- - PR -
【Axis2:クライアント】通信時エラーの細分化方法
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2007-09-26 19:41
現在、Axis2を使用したWebサービスのクライアントを以下の環境で開発をしています。
対向のWebサービスは以下の環境に構築されています。 ウェブサーバ:Apache2 アプリケーションサーバ:tomcat5 また、クライアントはwsdl2Javaを使用してスタブコードを自動生成しています。 スタブを使用して通信を行う中で発生する例外について質問があります。 @生成されたスタブのインスタンスを生成する時にAxisFaultがスローされるようですが、 これはどのような状況の時に発生するのでしょうか? インスタンス生成時に接続が行われるわけでもないようなので、 適当なエンドポイントを指定しても例外は発生しませんでした。 A生成されたスタブのwsdlで定義されたメソッドを呼び出した際に、RemoteExceptionが スローされるようになっています。(中身はAxisFault?) この時に発生する通信エラーの原因を細分化したいと思っています。 細分化する方法として以下の方法を考えています。 ・HTTPのレスポンスコードの解析 ・SOAPFaultの解析(faultcode等々) しかしながら、AxisFaultから上記の情報を取得する方法が過去ログやマニュアル等からは 検索できませんでした。 大変申し訳ございませんが、ご存知の方がいらっしゃいましたらご教授お願いいたいます。 |
|
投稿日時: 2007-11-29 18:07
自己レス
@については依然わかっていません。 Aについて HTTPのレスポンスコードについてはAxis2のモジュールが飲み込んでしまっているようなので、 上位AP側で取得することができませんでした。 たぶん、axis2-kernel.jar内のorg.apache.axis2.transport.http.HTTPSenderあたりが怪しい感じです。 中でレスポンスをハンドリングしているようです。 ただ、「SOAPレベルでのエラー」「TCP/IPレベルでのエラー」「HTTPレベルでのエラー」 を以下の方法でわけることが可能(?)かもしれません。 Axis2の実装依存になってしまう感じなのでいい方法とは言えないのですが、、、 接続自体ができなかった場合は、Causeに例外が詰まっているようです。 HTTPレベルは疎通レベルは通っているので例外ではなくReasonにレスポンスコード付 のメッセージが格納されているようです。 <<サンプルコード>> AxisFault af = (AxisFault) e; // SoapFaultの場合 if(af.getFaultCodeElement() != null) { System.out.println(af.getFaultCodeElement().getText()); System.out.println(af.getFaultReasonElement().getText()); // 接続エラー } else if(af.getCause() != null){ System.out.println(af.getReason()); // HTTPレベルでのエラーの場合 } else { System.out.println(af.getReason()); } |
|
投稿日時: 2007-11-29 19:13
axisであってaxis2じゃないんで参考ならなかったらごめんなさい
@WSDLファイルをローカルのものを移動するとどっかでエラーになった 記憶がありますが、おっしゃってる箇所のエラーだったか記憶ありません。 お時間があれば試してみてください Aソースうまく表示できなかったらごめんなさい 昔たしかこんなんでした 今考えるとどっちでもeを出したほうが確実かな catch (RemoteException e) { Throwable th = e.getCause(); if(th!=null){ //thのスタックトレース }else{ //eのスタックトレース } } |
1