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

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

4.4.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オブジェクトとして取得することができます。具体的な使用方法はサンプルを参照してください。


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

Copyright 2003 FUJITSU LIMITED