message要素

messeage要素では提供するサービスのオペレーション(=メソッド)でやり取りする1方向分のメッセージ定義を行います。SOAP-RPCの場合、リクエスト・レスポンスでそれぞれメッセージが行き来しますのでこの単位でmessage要素を記述していきます。

サンプルでは、ServiceStart()/GetItemInfoByPrice()/ServiceEnd()の3つのメソッドでそれぞれリクエスト・レスポンスが発生します。したがって6つのメッセージ要素を定義する必要があります。

<message name="ServiceStartRequest">
</message>
<message name="ServiceStartResponse">
</message>
<message name="GetItemInfoByPriceRequest">
</message>
<message name="GetItemInfoByPriceResponse">
</message>
<message name="ServiceEndRequest">
</message>
<message name="ServiceEndResponse">
</message>

実際のメッセージの中身はmesseage要素配下にpart要素を記述します。part要素で記述するデータ型は先のtypes要素で定義した型かXML Schemaで定義されている単純型となります。以下、具体的にメッセージの中身を定義していきます。

ServiceStartメソッド

ServiceStart()メソッドへのリクエストに引数はありません。したがってServiceStartRequestメッセージ要素にpart要素は含まれず、空要素となります。メソッドのレスポンスはbooleanで返しますのでpart要素でメッセージで使用するtype属性を指定する必要があります。booleanはXML Schemaの組込み単純型ですのでtypes要素では定義してありません。

<message name="ServiceStartRequest">
</message>
<message name="ServiceStartResponse">
  <part name="conn_bool" type="xsd:boolean" />
</message>

GetItemInfoByPriceメソッド

GetItemInfoByPrice()メソッドは、リクエストにパラメータとして価格のunsigned intを、レスポンスにはItemInfoResultオブジェクトの配列を返します。unsigned intはXML Schemaの単純型、ItemInfoResultオブジェクトの配列はtypes要素で定義済みです。

<message name="GetItemInfoByPriceRequest">
  <part name="find_age" type="xsd:unsignedInt"/>
</message>
<message name="GetItemInfoByPriceResponse">
  <part name="result" type="typens:ItemInfoResultArray"/>
</message>

ServiceEndメソッド

最後の、ServiceEnd()メソッドはリクエスト・レスポンスともvoidですのでpart要素は定義しません。最終的なmessage要素は次のようになります。

<message name="ServiceStartRequest"></message>
<message name="ServiceStartResponse">
  <part name="conn_bool" type="xsd:boolean" />
</message>
<message name="GetItemInfoRequest">
  <part name="find_age" type="xsd:unsignedInt" />
</message>
<message name="GetItemInfoResponse">
  <part name="result" type="typens:ItemInfoResultArray"/>
</message>
<message name="ServiceEndRequest"></message>
<message name="ServiceEndResponse"></message>