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

第4章 Messaging方式のアプリケーションの実装> 4.1 受信アプリケーションの作成

4.1.4 Faultを返す場合

 受信アプリケーションで処理に問題が生じたときには、送信元への返信データに、本来の処理結果の代わりのエラー情報としてFaultを使用できます。
 以下にサンプルプログラムSampleMsgSV4retFault.javaの例を用いて処理を説明します。

 import java.util.*;
 import javax.xml.soap.*;
 import javax.xml.messaging.*;

 public class SampleMsgSV4retFault implements ReqRespListener
 {
   public SampleMsgSV4retFault () { }

   public SOAPMessage onMessage( SOAPMessage message )
   {
     try{
       boolean isFault = false;
       String beName = null;
       SOAPEnvelope env = message.getSOAPPart().getEnvelope();
       SOAPBody body = env.getBody();
       Iterator it = body.getChildElements();
       while(it.hasNext()) {
         SOAPElement elm = (SOAPElement)it.next();
         beName = elm.getElementName().getLocalName();
         if( !beName.equals("RequestBody")) {
           isFault = true;
           break;
         }
       }

       MessageFactory mf = MessageFactory.newInstance();
       SOAPMessage resp = mf.createMessage();
       env = resp.getSOAPPart().getEnvelope();
       body = env.getBody();

       //**(1)**
       if( isFault ){
         SOAPFault fault = body.addFault();
         fault.setFaultCode("BadElementName");
         fault.setFaultString("BodyElement name is invalid.");
         Detail detail = fault.addDetail();
         DetailEntry entry = detail.addDetailEntry(
              env.createName( "FaultDetail", "m", "urn:SampleMsg" ));
         entry.addChildElement( env.createName( "Reason")).
              addTextNode("BodyElement name is unexpected:" + beName);
       }
       else{
         SOAPBodyElement elm = body.addBodyElement(
                     env.createName( "ResponseBody", "m", "urn:SampleMsg" ));
         elm.addChildElement( env.createName("Response")).
                     addTextNode("response string...");
         elm.addNamespaceDeclaration( "m", "urn:SampleMsg" );
       }

       resp.saveChanges();
       return resp;

     } catch( Exception e ) {
       e.printStackTrace();
       return null;
     }
   }
 }

■返信SOAPメッセージへのFaultの設定

 送信元にFaultを返信する場合、SAAJ-APIを使用して返信するSOAPメッセージのボディ部にFault情報を設定します。
 Fault情報を設定するにはSOAPBody.addFaultメソッドを使用してSOAPFaultオブジェクトを生成し、SOAPFaultの各メソッドを使用して詳細情報を組み立てます。サンプルではFaultコード、Fault文字列、およびDetail情報を設定しています。−(1)


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

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