Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド
目次 索引 前ページ

付録C SOAPメッセージの低レベル処理> C.4 Faultの処理

C.4.1 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”
“Client”
“VersionMismatch”
“MustUnderstand”

それぞれの意味については下記の“Faultコードの分類”を参照してください。

Fault説明

異常の内容を説明する文字列が設定されています。

Faultアクタ

エラーの発生した場所(受信アプリケーションなど)を表すURIです。

Fault詳細

Webサービス固有に定義される使用するエラー情報の項目が設定されています。

■Faultコードの取

 FaultコードはSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。

   java.lang.String  getFaultCode()

●Faultコードの分類

Faultコード

説明

Server

 Webサービス・コンテナや受信アプリケーションの処理過程で問題を検出したことを示します。
 例えば、Webサービス・コンテナの設定に誤りがある場合などに返ります。

Client

 送信アプリケーションが送信したメッセージ内容に誤りを検出したことを示すコードです。
 このFaultコードが送信アプリケーションに返された場合は、受信アプリケーションへ送信したメッセージを見直してください。

VersionMismatch

 Webサービスが、受信したメッセージのSOAPのバージョンに対応していないことを示します。

MustUnderstand

 Webサービスが、受信したメッセージのSOAPヘッダの処理必須である子要素の処理に失敗したことを示します。

その他のFaultコード値

 以下のような場合に上記以外のFaultコードが返されることがあります。
  ・Webサービスが独自にFaultコードを設定している場合

■Fault説明の取得

 Fault説明はSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。

   java.lang.String  getFaultString()

■Faultアクタの取得

 FaultアクタはSOAPFaultオブジェクトの以下のメソッドを使用して取り出します。

   java.lang.String  getFaultActor()

■Fault詳細の取得

 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を指定して取得してください。


目次 索引 前ページ

Copyright 2008 FUJITSU LIMITED