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

第4章 Messaging方式のアプリケーションの実装> 4.3 SAAJ-APIによるSOAPメッセージの処理

4.3.3 SOAPエンベロープの処理

 SOAPEnvelopeオブジェクトは、SOAPエンベロープを表すオブジェクトです。1つのSOAPメッセージには、必ず1つのSOAPエンベロープが含まれます。
 SOAPEnvelopeオブジェクトは、SOAPPart.getEnvelopeメソッドで取得できます。SOAPヘッダーやSOAPボディを直接操作する場合は、SOAPEnvelopeオブジェクトのAPIを使用します。SOAPエンベロープには0個または1個のSOAPヘッダーと1つSOAPボディが含まれています。

 import javax.xml.soap.*;
     .....
   MessageFactory mf = MessageFactory.newInstance();
   SOAPMessage msg = mf.createMessage();
   SOAPPart part = msg.getSOAPPart();
   SOAPEnvelope env = part.getEnvelope();

 // SOAPHeaderを使用しない場合の処理
   SOAPHeader header = env.getHeader();
   header.detachNode();

 // SOAPHeaderを設定する場合の処理
 // SOAPHeader header = env.getHeader();
 // SOAPHeaderElement helm = header.addHeaderElement(
 //       env.createName( "Header1", "ns1", "urn:Sample" ));
 // helm.addNamespaceDeclaration("ns1", "urn:Sample");

 // SOAPBodyの設定処理
   SOAPBody body = env.getBody();
   SOAPBodyElement belm = body.addBodyElement(
             env.createName( "Body1", "ns1", "urn:Sample" ));
   belm.addNamespaceDeclaration("ns1", "urn:Sample");
     .....

 SOAPヘッダーを使用しない場合はSOAPHeader.detachNodeメソッドを明示的に呼び出すか、または何もしません。何もしない場合は、空のヘッダー(<xxx:Header/>)が出力されます。

 SOAPHeader,SOAPHeaderElement,SOAPBody,SOAPBodyElementの各インタフェースは、SOAPElementインタフェースを継承していますので、そのままSOAPElementインタフェースがもつAPIを使用して子要素の設定・取得などの操作が行えます。

 SOAPエンベロープを処理するにはSOAPEnvelopeインタフェースのAPIを使用してSOAPHeaderやSOAPBodyのオブジェクトを直接操作することもできますが、XMLデータを使用してXMLオブジェクトをそのままSOAPエンベロープに設定することや、SOAPエンベロープの内容をXMLデータとして取り出すことができます。そのような場合はSOAPPartオブジェクトのsetContent/getContentメソッドを使用します。

 import javax.xml.soap.*;
 import javax.xml.transform.Source;
 import javax.xml.transform.sax.SAXSource;
 import javax.xml.transform.dom.DOMSource;
 import javax.xml.transform.stream.StreamSource;
     .....
   MessageFactory mf = MessageFactory.newInstance();
   SOAPMessage msg = mf.createMessage();
   SOAPPart part = msg.getSOAPPart();

 // SAXSourceオブジェクトを作成
   SAXSource source = .....;

 // DOMSourceオブジェクトを作成
   DOMSource source = .....;

 // StreamSourceオブジェクトを作成
   StreamSource source = .....;

 // SourceオブジェクトからSOAPMessageを作成
   part.setContent(source);
     .....

 // SOAPMessageをSourceオブジェクトとして取得
   Source source = part.getContent();
     .....

 SAXSource, DOMSource, StreamSourceはそれぞれSourceインタフェースを実装したクラスです。Sourceインタフェースを実装したオブジェクトはSOAPPart.setContentメソッドでSOAPエンベロープとして設定できます。同様にSOAPエンベロープの内容をSOAPPartのgetContentメソッドでSourceオブジェクトとして取得できます。具体的な使用方法はサンプルを参照してください。


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

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