| Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド |
目次
索引
|
| 付録C SOAPメッセージの低レベル処理 | > C.4 Faultの処理 |
受信アプリケーション(サーバシステム側のアプリケーション)の呼び出し処理で異常が発生した場合、送信アプリケーション(クライアントシステム側のアプリケーション)が受信する返信メッセージにFault情報が設定されます。受信した返信メッセージにFault情報が設定されているかどうかを判定するにはSOAPBody.hasFaultメソッドを使用します。このメソッドの返り値が真(true)の場合、返信メッセージにFault情報が設定されています。
Fault情報は、通常のSOAPメッセージと同様にSOAPボディの子要素として設定されます。Fault情報はSOAPFaultオブジェクトとして表され、SOAPBody.getFaultメソッドで取得できます。返信メッセージの受信からFault情報の取り出しは以下のようなプログラムコードになります。
import javax.xml.soap.*;
.....
// レスポンスデータ受信
SOAPMessage response = conn.call( msg, endPoint );
SOAPEnvelope env = response.getSOAPPart().getEnvelope();
// SOAPBodyの取り出し
SOAPBody body = env.getBody();
// Fault情報が設定されているかを判定
if( body.hasFault()) {
// Fault情報の取り出し
SOAPFault fault = body.getFault();
// Faultコードの取得
String faultCode = fault.getFaultCode();
// Fault説明の取得
String faultString = fault.getFaultString();
// Fault詳細の取得
Detail detail = fault.getDetail();
Iterator it = detail.getDetailEntries();
.....
}
else{
// Fault情報は設定されていない(正常系)
.....
} |
Fault情報には以下の情報が含まれています。
|
情報種別 |
説明 |
|---|---|
|
Faultコード |
異常の分類です。以下の文字列が設定されています。 “Server” それぞれの意味については下記の“Faultコードの分類”を参照してください。 |
|
Fault説明 |
異常の内容を説明する文字列が設定されています。 |
|
Faultアクタ |
エラーの発生した場所(受信アプリケーションなど)を表すURIです。 |
|
Fault詳細 |
Webサービス固有に定義される使用するエラー情報の項目が設定されています。 |
FaultコードはSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。
java.lang.String getFaultCode() |
●Faultコードの分類
|
Faultコード |
説明 |
|---|---|
|
Server |
Webサービス・コンテナや受信アプリケーションの処理過程で問題を検出したことを示します。 |
|
Client |
送信アプリケーションが送信したメッセージ内容に誤りを検出したことを示すコードです。 |
|
VersionMismatch |
Webサービスが、受信したメッセージのSOAPのバージョンに対応していないことを示します。 |
|
MustUnderstand |
Webサービスが、受信したメッセージのSOAPヘッダの処理必須である子要素の処理に失敗したことを示します。 |
|
その他のFaultコード値 |
以下のような場合に上記以外のFaultコードが返されることがあります。 |
Fault説明はSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。
java.lang.String getFaultString() |
FaultアクタはSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。
java.lang.String getFaultActor() |
Fault詳細は、任意の数のFault詳細項目で構成されたWebサービス固有の情報項目です。
Fault詳細はSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。
javax.xml.soap.Detail getDetail() |
またFault詳細に含まれる個々の詳細項目はjavax.xml.soap.DetailEntryオブジェクトとして表され、Detailオブジェクトの以下のメソッドを使用して取り出します。
java.util.Iterator getDetailEntries() |
それぞれのFault 詳細項目は、java.util.Iteratorオブジェクトにjavax.xml.soap.DetailEntryオブジェクトとして保持されています。Fault詳細項目の取り出し方は、以下のようなプログラムコードになります。
import javax.xml.soap.*;
.....
if( body.hasFault()) {
SOAPFault fault = body.getFault();
String faultCode = fault.getFaultCode();
String faultString = fault.getFaultString();
// Fault詳細の取得
Detail detail = fault.getDetail();
// Fault詳細項目の取得
Iterator it = detail.getDetailEntries();
while(it.hasNext()) {
DetailEntry entry = (DetailEntry)it.next();
.....
}
}
else{
.....
} |
javax.xml.soap.DetailEntryインタフェースはjavax.xml.soap.SOAPElementインタフェースを継承しています。よってFault詳細に含まれる個々の詳細項目は純粋なSOAPElementオブジェクトとして操作できます。

SOAPElement.getChildElements(Name name)メソッドを使用する場合、パラメタのNameオブジェクトは、必ずプレフィックスとURIを指定して取得してください。
目次
索引
|