- PR -

【Axis2:クライアント】通信時エラーの細分化方法

1
投稿者投稿内容
skaking
会議室デビュー日: 2007/01/23
投稿数: 4
投稿日時: 2007-09-26 19:41
現在、Axis2を使用したWebサービスのクライアントを以下の環境で開発をしています。
対向のWebサービスは以下の環境に構築されています。
ウェブサーバ:Apache2
アプリケーションサーバ:tomcat5

また、クライアントはwsdl2Javaを使用してスタブコードを自動生成しています。
スタブを使用して通信を行う中で発生する例外について質問があります。

@生成されたスタブのインスタンスを生成する時にAxisFaultがスローされるようですが、
これはどのような状況の時に発生するのでしょうか?
インスタンス生成時に接続が行われるわけでもないようなので、
適当なエンドポイントを指定しても例外は発生しませんでした。


A生成されたスタブのwsdlで定義されたメソッドを呼び出した際に、RemoteExceptionが
スローされるようになっています。(中身はAxisFault?)
この時に発生する通信エラーの原因を細分化したいと思っています。
細分化する方法として以下の方法を考えています。
・HTTPのレスポンスコードの解析
・SOAPFaultの解析(faultcode等々)
しかしながら、AxisFaultから上記の情報を取得する方法が過去ログやマニュアル等からは
検索できませんでした。
大変申し訳ございませんが、ご存知の方がいらっしゃいましたらご教授お願いいたいます。
ska
会議室デビュー日: 2006/01/19
投稿数: 1
投稿日時: 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());
}
marun
常連さん
会議室デビュー日: 2007/07/19
投稿数: 22
投稿日時: 2007-11-29 19:13
axisであってaxis2じゃないんで参考ならなかったらごめんなさい
@WSDLファイルをローカルのものを移動するとどっかでエラーになった
 記憶がありますが、おっしゃってる箇所のエラーだったか記憶ありません。
 お時間があれば試してみてください
Aソースうまく表示できなかったらごめんなさい
 昔たしかこんなんでした
 今考えるとどっちでもeを出したほうが確実かな
catch (RemoteException e) {
Throwable th = e.getCause();
if(th!=null){
//thのスタックトレース
}else{
//eのスタックトレース
}
}
1

スキルアップ/キャリアアップ(JOB@IT)