Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第4章 Messaging方式のアプリケーションの実装 | > 4.3 SAAJ-APIによる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オブジェクトとして取得できます。具体的な使用方法はサンプルを参照してください。
目次 索引 |