Interstage Application Server 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を使用して子要素の設定・取得などの操作が行えます。

- SOAPEnvelopeオブジェクトおよびその配下で、必要な名前空間宣言を行っていない場合、送信・返信時に、自動的に必要な名前空間宣言が送信・返信されるSOAPエンベロープのデータに追加されます。
- SOAP電子署名付加、XML暗号による暗号化を行う場合は、SOAPEnvelopeオブジェクトおよびその配下で 必ず必要な名前空間宣言を行ってください。
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