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

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

4.2.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)


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

Copyright 2003 FUJITSU LIMITED