23.2. 対話型 Web サービス
Seam では SOAP 要求と応答のメッセージの両方で SOAP ヘッダーエレメントを使い、 その対話 ID を消費者側からサービスへ、 またサービスから消費者側へと伝えています。 以下は対話 ID を含む Web サービス要求の一例です。
<soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:seam="http://seambay.example.seam.jboss.org/">
<soapenv:Header>
<seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>
2
</seam:conversationId>
</soapenv:Header>
<soapenv:Body>
<seam:confirmAuction/>
</soapenv:Body>
</soapenv:Envelope>
上記の SOAP メッセージには
conversationId エレメントが含まれ、 要求の対話 ID を含んでいます。 この例の場合は 2 です。 Web サービスを使う Web サービスのクライアントは多種多様で、なおかつさまざまな言語で記述されているため、 ひとつの対話のスコープ内で使われるそれぞれの Web サービス間の対話 ID の伝播を実装するのは開発者の責任となります。
conversationId ヘッダーエレメントは http://www.jboss.org/seam/webservice の名前空間に適したものでなければいけません。 そうでないと、 Seam はその要求から対話 ID を読み取ることができなくなります。 上記の要求メッセージに対する応答の例を示します。
<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
<env:Header>
<seam:conversationId xmlns:seam='http://www.jboss.org/seam/webservice'>
2
</seam:conversationId>
</env:Header>
<env:Body>
<confirmAuctionResponse
xmlns="http://seambay.example.seam.jboss.org/"/>
</env:Body>
</env:Envelope>
応答メッセージには要求と同じ
conversationId エレメントが含まれているので留意してください。
23.2.1. 推奨される方法 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
Web サービスはステートレスセッション Bean または POJO で実装する必要があります。そのため 対話型 Web サービスには対話型 Seam コンポーネントの外観に Web サービスを実装させることをお勧めします。
Web サービスをステートレスセッション Bean で記述する場合は、 それに
@Name アノテーションを付与することで Seam コンポーネントに変換することも可能です。 これにより Web サービスのクラス自体で Seam のバイジェクションやその他の機能を使用することができます。