SOAP over JMS プロトコル
Web サービス・エンジンは、クライアント/サーバー間で SOAP メッセージ通信を行う手段として、HTTP の代わりに新しい業界標準の SOAP over Java™ Message Service (JMS) に準拠するメッセージング・トランスポートを使用できるようにサポートします。

IBM® およびその他のベンダーは、 2005 年以来、提案された SOAP over JMS 仕様に取り組んできました。この仕様は W3C に提出され、ワーキング・グループが設置されました。このドラフト仕様の現行メンバーによるサブミットは、2007 年 10 月に共同で発表されました。この業界標準について詳しくは、SOAP over JMS 仕様を参照してください。
クライアントまたはサーバーのコンポーネントに実装を提供する必要がある場合は、新しい業界標準の SOAP over JMS トランスポート・プロトコルを使用します。 また、実装が、WebSphere® Application Server の Web サービス・エンジンに用意されているクライアントおよびサーバー・コンポーネントと相互運用できる必要もあります。
クライアント・コンポーネントは、SOAP 要求メッセージの送信と SOAP 応答メッセージの受信を担当し、以下のプロトコルの制約に従います。
- クライアントは、SOAP 要求メッセージをサーバーに送信するのに、javax.jms.BytesMessage オブジェクトまたは javax.jms.TextMessage オブジェクトを使用する必要があります。
- クライアントは、宛先のキューまたはトピックに送信する前に、JMS 要求メッセージで以下のプロパティーを設定する必要があります。
- SOAPJMS_contentType: このプロパティーは、HTTP メッセージの Content-Type ヘッダーに似ており、メッセージのコンテンツ・タイプを記述するために使用されます。
添付ファイルを含まないメッセージなど、テキストのみの SOAP メッセージは、この JMS メッセージ・プロパティーに次の値が設定されます。
text/xml; charset="UTF-8"
添付ファイルを含む SOAP メッセージの場合は、以下のコードを使用して JMS メッセージの SOAPJMS_contentType プロパティーを設定します。
この例では、複数パーツ・メッセージを示しており、最初のパーツが、SOAP エンベロープを含むタイプ text/xml です。複数パーツ・メッセージの他のパーツには、さまざまな添付ファイルが含まれています。 HTTP 1.1 仕様には、Content-Type ヘッダーに関するさらに多くの情報が含まれています。multipart/related; type="text/xml"; start="<...content-id_of_first_ part...>"
- enableTransaction: サーバー・コンポーネントが、宛先のキューまたはトピックからメッセージを受信する際に使用されたのと同じトランザクションで Web サービス要求を処理する必要がある場合には、アウトバウンド JMS 要求メッセージで、このオプション・プロパティーを true に設定します。
このプロパティーは、SOAP over JMS の仕様に IBM が拡張したものです。
ベスト・プラクティス: クライアント・コンポーネントの場合は、発生する可能性のある同期の問題を回避する片方向または両方向の非同期要求に対してのみ、このプロパティーを true に設定してください。このプロパティーを設定しない場合、あるいはデフォルト値の false に設定した場合、サーバーは宛先のキューまたはトピックから要求メッセージを受信するのに使用した トランザクションを使用停止してから、要求を処理するための Web サービス・エンジンを呼び出します。bprac
- SOAPJMS_requestURI: このプロパティーは、要求に関連付けられた JMS エンドポイント URL に設定する必要があります。
- SOAPJMS_soapAction: Web サービス要求と関連付けられている soapAction 値を示すために、 アウトバウンド JMS 要求メッセージでこのオプション・プロパティーを設定します。 このプロパティーは、HTTP トランスポートを介して Web サービス要求をトランスポートするのに 使用される SOAPAction HTTP ヘッダーと同様の働きをします。soapAction プロパティーの値は、 SOAP 要求の意図を明らかにする URI です。 SOAPJMS_soapAction プロパティーを指定すると、サーバー・コンポーネントはこのプロパティーによって 要求の宛先を判断します。SOAP 仕様には、URI のフォーマットや特殊性に関する制限はなく、URI が解決可能であることも必須ではありません。通常、 このプロパティーは WSDL 文書の soapAction 値に設定されます。
- SOAPJMS_targetService: このプロパティーは、アウトバウンド JMS 要求メッセージに設定する必要があり、その値は要求の JMS エンドポイント URL にある targetService プロパティーの値に一致する必要があります。 この値は、サーバー・コンポーネントが要求のディスパッチ先ポート・コンポーネントを判定する際に使用されます。
- SOAPJMS_bindingVersion: このプロパティーは、クライアントおよびサーバーで使用されるプロトコルのバージョン番号を示します。 この値を 1.0 に設定します。
- SOAPJMS_contentType: このプロパティーは、HTTP メッセージの Content-Type ヘッダーに似ており、メッセージのコンテンツ・タイプを記述するために使用されます。
添付ファイルを含まないメッセージなど、テキストのみの SOAP メッセージは、この JMS メッセージ・プロパティーに次の値が設定されます。
- 要求メッセージが両方向要求を表している場合 (返答が期待される場合)、クライアント・コンポーネントでは、応答メッセージに使用されるキューを指定するために、JMS メッセージの JMSReplyTo プロパティーを設定する必要があります。 キューを指定するには、JMS メッセージの setJMSReplyTo を使用します。 クライアントで永続的な応答キューを構成すると、Web サービス要求が行われるたびにクライアントが一時キューを作成しなくてもよいという利点があります。 この特殊なキューの作成について詳しくは、SOAP over JMS を使用した Web サービス用の永続的な応答キューの構成に関する情報を参照してください。
- SOAP 要求メッセージが片方向要求を表している場合 (応答メッセージが期待されない場合)、クライアント・コンポーネントでは JMS メッセージの JMSReplyTo プロパティーを設定しないようにする必要があります。
- クライアント・コンポーネントは、応答メッセージが JMS BytesMessage オブジェクトであると想定することができます。
- クライアント・コンポーネントは、応答メッセージの相関 ID が 元の要求メッセージのメッセージ ID に一致すると想定することができます。
サーバー・コンポーネントは、SOAP 要求メッセージの受信と SOAP 応答メッセージの送信を担当し、以下のプロトコルの制約に従います。
- サーバー・コンポーネントは、JMS BytesMessage の受信を期待することになります。 サーバー・コンポーネントで BytesMessage 以外が受信された場合、応答が期待されている場合はサブコード unsupportedJMSMessageFormat 付きの障害メッセージがクライアントに返されます。
- サーバー・コンポーネントは、javax.jms.BytesMessage オブジェクトまたは javax.jms.TextMessage オブジェクトの受信を期待することになります。 サーバー・コンポーネントで受信したものが BytesMessage または TextMessage 以外であった場合、応答が期待されている場合にはサブコード unsupportedJMSMessageFormat 付きの障害メッセージがクライアントに返されます。
- サーバー・コンポーネントは、SOAP 要求を正しく処理して、適切な SOAP 応答メッセージを作成する必要があります。
- サーバー・コンポーネントは、JMS 要求メッセージの JMSReplyTo プロパティーが設定されている場合にのみ、応答メッセージをクライアントに返信する必要があります。JMS メッセージの getJMSReplyTo メソッドは、JMS メッセージから JMSReplyTo プロパティー値を取得するために使用します。このプロパティー値は応答宛先を示します。
- 応答メッセージの送信時、サーバー・コンポーネントは、要求と同じメッセージ・タイプを使用する必要があります。 BytesMessage として要求を受信した場合、その応答は BytesMessage として送信する必要があります。 同様に、TextMessage として要求を受信した場合、その応答は TextMessage として送信する必要があります。
- サーバー・コンポーネントは、応答キューにメッセージを送信する前に、JMS 応答メッセージの以下のプロパティーを設定する必要があります。
- SOAPJMS_contentType: このプロパティーは、メッセージのコンテンツ・タイプを記述するために使用されます。 このプロパティーの説明については、このトピックのクライアントの役割のセクションを参照してください。
- correlation ID: JMS 応答メッセージの相関 ID プロパティーを、元の JMS 要求メッセージのメッセージ ID に設定する必要があります。 この相関は、JMS メッセージの setJMSCorrelationID メソッドを呼び出すことで実行されます。
- SOAPJMS_bindingVersion: このプロパティーは、クライアントおよびサーバーで使用されるプロトコルのバージョン番号を示します。 この値を 1.0 に設定します。
以下の例は、添付ファイルを含まない要求メッセージに対して、JMS メッセージの toString メソッドを呼び出した結果を示したものです。
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_7D6C2035383215AB00000000000F4241?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: text/xml; charset=UTF-8
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/MyRequestQueue?jndiConnectionFactoryName=jms/MyConnFactory&targetService=MyPort1
SOAPJMS_soapAction: "getQuote"
SOAPJMS_bindingVersion: 1.0
3c3f786d6c2076657273696f6e3d22312e302220656e636f64696e673d227574662d38223f3e3c73
6f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f7363
68656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e733a
7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d61222078
...
以下の例は、添付ファイルを含む要求メッセージに対して、JMS メッセージの toString メソッドを呼び出した結果を示したものです。
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: -1
JMSCorrelationID: null
JMSDestination: null
JMSReplyTo: queue://_Q_F0940794C5CC2F84000000000044AA21?busName=WsFvtBus
JMSRedelivered: false
JMS_IBM_MsgType: 1
SOAPJMS_contentType: multipart/related;
boundary=MIMEBoundaryurn_uuid_B6BAFEADB1886ADC241205525550237;
type="text/xml"; start="<0.urn:uuid:B6BAFEADB1886ADC241205525550238@apache.org>"
SOAPJMS_targetService: MaelstromWsEndpoint
SOAPJMS_requestIRI: jms:jndi:jms/WebSvcsJMSQ?jndiConnectionFactoryName=
jms/WebSvcsJMS_CF&targetService=MaelstromWsEndpoint
SOAPJMS_soapAction: attachment
SOAPJMS_bindingVersion: 1.0
2d2d4d494d45426f756e6461727975726e5f757569645f4236424146454144423138383641444332
34313230353532353535303233370d0a436f6e74656e742d547970653a20746578742f786d6c3b20
636861727365743d5554462d380d0a436f6e74656e742d5472616e736665722d456e636f64696e67
3a20386269740d0a436f6e74656e742d49443a203c302e75726e3a757569643a4236424146454144
4231383836414443323431323035353235353530323338406170616368652e6f72673e0d0a0d0a3c
736f6170656e763a456e76656c6f706520786d6c6e733a736f6170656e763d22687474703a2f2f73
6368656d61732e786d6c736f61702e6f72672f736f61702f656e76656c6f70652f2220786d6c6e73
3a7873643d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368656d612220
786d6c6e733a7873693d22687474703a2f2f7777772e77332e6f72672f323030312f584d4c536368
656d612d696e7374616e63652220786d6c6e733a736f6170656e633d22687474703a2f2f73636865
...
以下の例は、SOAP 応答メッセージに対して、JMS メッセージの toString メソッドを呼び出した結果を示したものです。
JMSMessage class: jms_bytes
JMSType: null
JMSDeliveryMode: 2
JMSExpiration: 0
JMSPriority: 4
JMSMessageID: null
JMSTimestamp: 0
JMSCorrelationID: ID:cdddb857f078a266eb9a972f110a134f0000000000000001
JMSDestination: null
JMSReplyTo: null
JMSRedelivered: false
contentType: multipart/related; type="text/xml";
start="<961368106530.1092112854745.IBM.WEBSERVICES@yackerjr>";
boundary="----=_Part_0_1655006754.1092112854745"
0d0a2d2d2d2d2d2d3d5f506172745f305f313635353030363735342e313039323131323835343734
350d0a436f6e74656e742d547970653a20746578742f786d6c3b20636861727365743d5554462d38
...