SOAP メッセージに XML しか含まれていない場合は、Java Message Service (JMS) メッセージの 本文タイプ TextMessage を使用して JMS トランスポート・メカニズム上で送信できます。 この情報、およびそれに関連したコード・フラグメントを使用すると、 WSDL 拡張を作成することで、WSIF サービスが、Java Message Service (JMS) を トランスポート・メカニズムに使用する SOAP サービスにアクセスできます。
SOAP メッセージは、SOAP エンベロープも含めて、JMS メッセージでラップされ、適切なキューに配置されます。 コンテナーは、JMS メッセージを受信すると、SOAP メッセージを除去してクライアントに送信します。
Java Message Service (JMS) API での作業について詳しくは、WSIF サービスの JMS 提供のサービスへのリンクを参照してください。
<soap:binding> タグの transport 属性を設定して、JMS が使用されていることを示します。 さらに、以下のように style 属性を rpc (リモート・プロシージャー・コール) に設定する場合、Web Services Invocation Framework (WSIF) は、操作が Web サービス・エンドポイントで呼び出されたものと想定します。
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/jms"/>
JMS を介した SOAP の場合、<wsdl:port> タグに <jms:address> エレメントを含める必要があります。このエレメントには、クライアントが JMS プログラミング・モデルを使用して Web サービスに正しく接続するために必要な情報が含まれています。 これは通常、JMS クライアントの役目をする JMS を介した SOAP バインディングをサポートするために生成されるスタブです。 これ以外の方法としては、Web サービス・クライアントは直接 JMS プログラミング・モデルを使用できます。
<jms:address destinationStyle= "queue" jmsVendorURI = "http://ibm.com/ns/mqseries"? initialContextFactory= "com.ibm.NamingFactory"? jndiProviderURL= "iiop://something:900/wherever"? jndiConnectionFactoryName= "orange" jndiDestinationName="fred"> <jms:propertyValue name="targetService" type="xsd:string" value="StockQuoteServicePort"/> </jms:address>ここで、疑問符 (?) でマークされた属性は、オプションです。
オプションの jmsVendorURI 属性は、JMS インプリメンテーションを一意的に識別するストリングです。WSIF はこの URI を無視します。これはクライアント開発者と、場合によりクライアント・インプリメンテーションによって使用され、クライアント・ランタイム環境で適切な JMS プロバイダーへのアクセス権があるかどうかが判断されます。
オプション属性 initialContextFactory および jndiProviderURL は、ランタイム環境にデフォルトの Java Naming and Directory Interface (JNDI) プロバイダーが構成されている場合にのみ省略できます。
jndiConnectionFactoryName 属性は JMS ConnectionFactory オブジェクトの名前を指定しますが、このオブジェクトは jndiContext 属性で指定される JNDI コンテキスト内で検索することができます。 この ConnectionFactory オブジェクトを使用して、このキューを所有する JMS プロバイダー・インスタンスに対する JMS 接続を作成します。 構成を単純にする場合は、サーバー・メッセージ・リスナーとクライアントが同一の ConnectionFactory オブジェクトを使用します。 ただし、サーバーとクライアントがすべて同じ JMS プロバイダー・インス タンスに接続する場合は、別々の ConnectionFactory オブジェクトを使用することができます。
targetService <jms:propertyValue> エレメントの value 属性は、ターゲット・サービスの webservices.xml ファイルの <port-component-name> エレメントで定義された、ターゲット・サービスのポート・コンポーネント名です。
<jms:property> タグを使用して、JMS ヘッダーおよびプロパティーを設定します。 次のタグは、メッセージ・パーツまたはリテラル値のいずれかを JMS プロパティーにマップします。
<jms:property name="Priority" {part="requestPriority" | value="fixedValue"}/>
If the <jms:property> has a literal value, then it can also be nested within the <jms:address> tag:
<jms:property name="Priority" value="fixedValue" />
この形式 の <jms:property> タグは、ネイティブ JMS バインディングでも使用されます。
<!-- Example: SOAP over JMS Text Message --> <?xml version="1.0" encoding="UTF-8"?> <wsdl:definitions name="StockQuoteInterfaceDefinitions" targetNamespace="urn:StockQuoteInterface" xmlns:tns="urn:StockQuoteInterface" xmlns:xsd="http://www.w3.org/2000/10/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:jms="http://schemas.xmlsoap.org/wsdl/jms/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:message name="GetQuoteInput"> <part name="symbol" type="xsd:string"/> </wsdl:message> <wsdl:message name="GetQuoteOutput"> <part name="value" type="xsd:float"/> </wsdl:message> <wsdl:portType name="StockQuoteInterface"> <wsdl:operation name="GetQuote"> <wsdl:input message="tns:GetQuoteInput"/> <wsdl:output message="tns:GetQuoteOutput"/> </wsdl:operation> </wsdl:portType> <wsdl:binding name="StockQuoteSoapJMSBinding" type="tns:StockQuoteInterface"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/jms"/> <wsdl:operation name="GetQuote"> <soap:operation soapAction="urn:StockQuoteInterface#GetQuote"/> <wsdl:input> <soap:body use="encoded" namespace="urn:StockQuoteService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:input> <wsdl:output> <soap:body use="encoded" namespace="urn:StockQuoteService" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="StockQuoteService"> <wsdl:port name="StockQuoteServicePort" binding="sqi:StockQuoteSoapJMSBinding"> <jms:address destinationStyle="queue" jndiConnectionFactoryName="myQCF" jndiDestinationName="myQ" initialContextFactory= "com.ibm.NamingFactory" jndiProviderURL="iiop://something:900/"> <jms:propertyValue name="targetService" type="xsd:string" value="StockQuoteServicePort"/> </jms:address> </wsdl:port> </wsdl:service> </wsdl:definitions>
jms:/[queue|topic]?<property>=<value>&<property>=<value>&...ここで、queue または topic の指定は、 JMS アドレスの destinationStyle 属性に対応します。
以下の表は、<soap:address> タグで使用する場合の有効なプロパティーをリストしています。
プロパティー名 | プロパティーの説明 | 対応する JMS アドレス値 |
---|---|---|
destination | 宛先キューまたはトピックの JNDI 名 | jndiDestinationName |
connectionFactory | 接続ファクトリーの JNDI 名。 | jndiConnectionFactory |
targetService | ターゲット・サービスのポート・コンポーネント名 | targetService jms:propertyValue within jms:address |
JNDI 関連のプロパティー (オプション) | ||
initialContextFactory | 初期コンテキスト・ファクトリーの名前 | initialContextFactory |
jndiProviderURL | JNDI プロバイダー URL | jndiProviderURL |
JMS 関連のプロパティー (オプション) | ||
deliveryMode | 要求メッセージを永続的にするかどうかを指示します。 有効な値は DeliveryMode.NON_PERSISTENT (デフォルト) と DeliveryMode.PERSISTENT です。 | JMSDeliveryMode |
password | 接続ファクトリーに対するアクセスの取得に使用するパスワード。 | JMSPassword |
priority | 要求メッセージに関連付けられた JMS 優先順位。有効な値は 0 から 9 です。 デフォルト値は 4 です。 | JMSDeliveryMode |
replyTo | 応答メッセージが送信される、JNDI 宛先キュー。 | JMSReplyTo |
timeToLive | 要求メッセージの存続時間 (ミリ秒単位)値 0 は、無制限に存続することを表します。 | JMSTimeToLive |
userid | 接続ファクトリーに対するアクセスの取得に使用するユーザー ID。 | JMSUserid |
以下にこのフォーマットの例を示します。
<jms:address> format:
<wsdl:port name="StockQuoteServicePort" binding="sqi:StockQuoteSoapJMSBinding"> <jms:address destinationStyle="queue" jndiConnectionFactoryName="myQCF" jndiDestinationName="myQ" initialContextFactory= "com.ibm.NamingFactory" jndiProviderURL="iiop://something:900/"> <jms:propertyValue name="targetService" type="xsd:string" value="StockQuoteServicePort"/> </jms:address> </wsdl:port>
<soap:address> format:
<wsdl:port name="StockQuoteServicePort" binding="sqi:StockQuoteSoapJMSBinding"> <soap:address location="jms:/queue?connectionFactory=myQCF&destination =myQ&initialContextFactory=com.ibm.NamingFactory&jndiProviderURL =iiop://something:900/&targetService=StockQuoteServicePort" /> </wsdl:port>