Interstage Application Server SOAPサービス ユーザーズガイド |
目次 索引 |
第4章 Messaging方式のアプリケーションの実装 | > 4.1 受信アプリケーションの作成 |
以下、サンプルプログラムSampleMsgSV2ReqResp.javaの例を用いて処理を説明します。
import javax.xml.soap.*; import javax.xml.messaging.*; public class SampleMsgSV2ReqResp implements ReqRespListener //**(1)** { public SampleMsgSV2ReqResp () { } public SOAPMessage onMessage( SOAPMessage message ) //**(2)** { //**(3)** try{ message.writeTo(System.out); //**(4)** MessageFactory mf = MessageFactory.newInstance(); SOAPMessage resp = mf.createMessage(); SOAPEnvelope env = resp.getSOAPPart().getEnvelope(); SOAPBody body = env.getBody(); SOAPBodyElement elm = body.addBodyElement( env.createName( "ResponseMessage", "m", "urn:SampleMsg" )); elm.addChildElement( env.createName("Response")). addTextNode("response string..."); elm.addNamespaceDeclaration( "m", "urn:SampleMsg"); resp.saveChanges(); //**(5)** return resp; } catch( Exception e ) { e.printStackTrace(); return null; } } } |
SOAPメッセージを受信して処理を行い、送信元に何らかのSOAPメッセージを返信する受信アプリケーションは、javax.xml.messaging.ReqRespListenerインタフェースを実装して、public SOAPMessage onMessageメソッドを実装します。−(1),(2)
メソッドのパラメタとして、受け取ったSOAPメッセージを表すSOAPMessageオブジェクトが渡されます。−(2)
SAAJ-APIを使用して、SOAPMessageオブジェクトを解析して必要な処理を行います。SOAPMessageオブジェクトの解析については、“SAAJ-APIによるSOAPメッセージの処理”を参照してください。この例では、受信したSOAPメッセージを標準出力に出力しています。−(3)
送信元に返信するSOAPメッセージをSOAPMessageオブジェクトとして、SAAJ-APIを使用して作成します。
SOAPエンベロープを表すSOAPEnvelopeオブジェクトを作成するには、createNameメソッドやaddBodyElementメソッドなどのAPIを使用してアプリケーションロジックで組み立てる方法と、DOMやSAXなどのXMLデータ、既存のファイルから読み込んだXMLデータをSOAPエンベロープの内容として取り込む方法があります。詳細については“SAAJ-APIによるSOAPメッセージの処理”を参照してください。
この例では、アプリケーションロジックで組み立てる方法を使用して、以下のSOAPメッセージを作成しています(わかりやすくするために要素の間に改行と空白を追加して表示しています。プログラム例で実際に作られるSOAPメッセージにはこれらの改行や空白は含まれません。実際に表示どおりのSOAPメッセージを作るには、明示的に改行と空白のTextノードを追加する必要があります)。−(4)
<soapenv:Envelope xmlns:soapenv=http://schemas.xmlsoap.org/soap/envelope/ xmlns:xsd=http://www.w3.org/2001/XMLSchema xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <m:ResponseBody xmlns:m="urn:SampleMsg"> <Response>response string...</Response> </m:ResponseBody> </soapenv:Body> </soapenv:Envelope> |
作成したSOAPMessageオブジェクトをメソッドの返り値として返信します。−(5)
目次 索引 |