Interstage Application Server SOAPサービス ユーザーズガイド
目次 索引 前ページ次ページ

第5章 RPC方式のアプリケーションの実装> 5.6 Fault情報の設定と解析

5.6.1 Fault情報の設定

 RPCサーバアプリケーションのメソッドが例外を投げる(throwする)と、RPCクライアントアプリケーションに対してFault情報が送信されます。Fault情報は、発生した問題に関する情報をRPCクライアントアプリケーションに通知するものです。
 RPCサーバアプリケーションで例外としてjavax.xml.rpc.soap.SOAPFaultExceptionをthrowすることで、送信されるFault情報の内容を設定できます。
 RPCサーバアプリケーションのメソッドがjavax.xml.rpc.soap.SOAPFaultException以外のThrowableオブジェクトをthrowした場合、以下の情報が含まれたFault情報を送信します。

Faultコード

"Server"

Fault説明

"Throwable is thrown in server application(1220)"

■Fault情報設

 以下の情報がFault情報に設定できます。

情報種別

内容

Faultコード

エラーの分類です。以下の値が指定できます。

  • "Server"
  • "Client"

Fault説明

エラーの内容を説明する文字列です(任意)。
文字列の長さに制限はありません。

Faultアクタ

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

Fault詳細

Webサービス固有に定義されるエラー情報項目を指定します。

 Fault情報は、javax.xml.rpc.soap.SOAPFaultExceptionのコンストラクタのパラメタに指定します。

 SOAPFaultException(
   javax.xml.namespace.QName Faultコード,
     String Fault説明,
     String Faultアクタ,
     javax.xml.soap.Detail Fault詳細 )

■Fault詳細項目の設定

 Fault 詳細項目は、javax.xml.soap.DetailEntryオブジェクトとして生成します。javax.xml.soap.DetailEntryオブジェクトはSAAJ-APIのjavax.xml.soap.SOAPElementを継承したインタフェースなのでjavax.xml.soap.SOAPElementオブジェクトに対する操作をそのまま行うことができます。SAAJ-APIについての詳細は“SAAJ-APIによるSOAPメッセージの処理”を参照してください。

 以下にjavax.xml.rpc.soap.SOAPFaultExceptionをthrowするRPCサーバアプリケーションのメソッドのプログラム例を示します。このメソッドでは、inパラメタのStringの配列に特定の値が含まれていたときに、javax.xml.rpc.soap.SOAPFaultExceptionをthrowし、RPCクライアントアプリケーションにFault情報が送信されます。

 javax.xml.rpc.soap.SOAPFaultExceptionをthrowするSOAPサーバアプリケーションのメソッドの例

・java.lang.Stringの配列(foods)に特定文字("carrot")が含まれていたときにjavax.xml.rpc.soap.SOAPFaultExceptionをthrowします。

 public void eat(String[] foods)
 throws java.rmi.RemoteException     // SOAPFaultExceptionはRemoteExceptionから派生
 {
   for( int i=0; i<foods.length; i++ ){
     if ( foods[i].equalsIgnoreCase("carrot") ){
       try{
         SOAPFactory sf= SOAPFactory.newInstance();
         Detail detail= sf.createDetail();
         Name name = se.createName("index","carrot","urn:sample-service-carrot");
         DetailEntry idx= detail.addDetailEntry(name);
         idx.addTextNode(Integer.toString(i));
         throw new SOAPFaultException ("Client", "I don't like carrots!", detail);
       }catch(SOAPException se) {
         se.printStackTrace();
       }
     }
   }
 }

 RPCクライアントアプリケーションでのFault情報の処理方法は、“Fault情報の解析”を参照してください。



目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005