Address Book サンプルでは、SOAPInput、SOAPReply、SOAPRequest の各ノードを使用して、HTTP トランスポートまたは JMS トランスポートに基づく Web サービスを提供する方法とコンシュームする方法の両方を示します。
サンプルの開始点は、住所録を定義する WSDL ファイルです。WSDL ファイル を参照してください。HTTP バインディングと JMS バインディングの両方を組み込んだ WSDL ファイルでは、WSDL で定義されている操作を参照します。Web サービスは、アドレスの保管およびアドレスの検索という 2 つの操作を実行します。 SOAP over HTTP の場合は、WebSphere Application Server に対するアクセス権があれば、このサンプルに含まれているプロバイダーとコンシューマーを WebSphere Application Server の Address Book サンプルに用意されているプロバイダーとコンシューマーと交換できます。WebSphere Application Server に用意されている Address Book サンプルは、SOAP over JMS トランスポートに対応していません。SOAP over JMS トランスポートをサポートするには、JMS のバインディングとポートを WSDL に追加することによって Web サービス・サンプルを再生成し、WebSphere Application Server との相互運用を可能にする必要があります。このサンプルに用意されている WSDL ファイルを参照してください。
プロバイダー用にメッセージ・セットおよびブランク・メッセージ・フローを作成するには、「WSDL または XSD ファイル (あるいはその両方) から開始」ウィザードを WSDL ファイルと共に使用します。 これで、コンシューマー・フローを手動で作成できます。
Address Book サンプルでは、以下のタスクを示します。
Address Book サンプルは、2 つのメッセージ・フローを使用します。最初のメッセージ・フローは Web サービスを提供し、他方のメッセージ・フローは Web サービスをコンシュームします。
下の図は、Web サービス・プロバイダーのメッセージ・フローを示しています。
次の表は、Web サービス・プロバイダーのメッセージ・フロー内のノードを示しています。
ノード・タイプ | ノード名 |
---|---|
SOAPInput | SOAP Input |
RouteToLabel | RouteToLabel |
Label | saveAddress |
Compute | SaveCompute |
Label | findAddress |
Compute | FindCompute |
SOAPReply | SOAP Reply |
このフローは、SOAPInput ノードと SOAPReply ノードで構成されています。SOAPInput ノードのすべてのプロパティーを自動的に入力するには、SOAPInput ノードに WSDL ファイルをドラッグします。(WSDL ファイルがメッセージ・セット・プロジェクトに入っているのは、「WSDL または XSD ファイル (あるいはその両方) から開始」ウィザードを使用した後に限られます。)
SOAPInput ノードは、着信 SOAP メッセージを受信し、そのメッセージが有効であれば、メッセージ・フローをたどって RouteToLabel ノードにそのメッセージを渡します。RouteToLabel ノードは、メッセージを Label ノードに転送します。そのノードの名前は、ローカル環境にあります (OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname)。 着信 SOAP メッセージを処理するときに、このパスを明示的に設定する必要はありません。SOAPInput ノードが、そのパスとして、呼び出し対象の操作の名前を自動的に設定するからです。ただし、SOAPInput ノードを RouteToLabel ノードに接続して、操作ごとに Label ノードを作成することは必要です。
呼び出し対象の操作が saveAddress の場合は、SaveCompute ノードにメッセージが送信されます。そのノードでは、住所が共有 ESQL 変数に格納されます。共用変数が存続するのは、メッセージ・フローの有効期間内です。 メッセージ・フローを再デプロイする場合、保存されたアドレスはすべて失われます。
呼び出し対象の操作が findAddress の場合は、FindCompute ノードにメッセージが送信されます。そのノードでは、共有変数に対する照会によって、入力メッセージで名前が指定されている個人の住所が検出されます。住所が見つかった場合は、その住所が返されます。住所が共有変数に入っていない場合は、SOAP 障害が構成されます。
下の図は、Web サービス・コンシューマーのメッセージ・フローを示しています。
次の表は、Web サービス・コンシューマーのメッセージ・フロー内のノードを示しています。
ノード・タイプ | ノード名 |
---|---|
MQInput | AddressBook_IN |
Compute | RoutingCompute |
RouteToLabel | RouteToLabel |
Label | findAddress |
Compute | FindCompute |
SOAPRequest | findAddress |
Label | saveAddress |
Compute | SaveCompute |
SOAPRequest | saveAddress |
Compute | ComputeResponse |
MQOutput | AddressBook_OUT |
MQOutput | AddressBook_FAULT |
Web サービス・コンシューマー・フローは、MQInput ノードによってモニターされるキューに着信する WebSphere MQ メッセージによって開始されます。このメッセージは XMLNSC ドメイン内の XML メッセージです。 RouteToLabel ノードを使用するには、RoutingCompute ノードを使用して、このフローのための値を明示的にローカル環境で設定する必要があります。
OutputLocalEnvironment.Destination.RouterList.DestinationData[1].labelname = InputRoot.XMLNSC.request.operation
その後、メッセージは、正しい Label ノードに送付されます。Label ノードは、Compute ノードにメッセージを転送します。Compute ノードは、入力メッセージを使用して、SOAP ドメインでアウトバウンド要求メッセージを作成します。そのメッセージは、正しい SOAPRequest ノードに転送されます。SOAPRequest ノードでは、プロバイダー・フローが呼び出されます。 戻りメッセージが MQOutput ノードに送信されます。MQOutput ノードでは、XML データが指定の WebSphere MQ キューに書き込まれます。
Web サービス・コンシューマーのメッセージ・フローは、WebSphere MQ メッセージによって駆動されます。 以下の XML メッセージを使用してサンプルを実行するテスト・クライアント・ファイルが用意されています。 最初のメッセージはアドレスを保管し、2 番目のメッセージはそのアドレスを検索します。 最初のエレメントは、呼び出す操作を指定します。メッセージの残りの部分は、プロバイダー・フローに送られる SOAP メッセージの作成に使用されます。
<request> <operation>saveAddress</operation> <Name>Dave</Name> <City>Carlisle</City> <Street>Welton</Street> <Province>Cumbria</Province> <PostalCode>NE2 3HP</PostalCode> <Area>1</Area> <Prefix>2</Prefix> <Local>3</Local> </request>
その後、2 番目の入力メッセージがそのアドレスを検索します。
<request> <operation>findAddress</operation> <Name>Dave</Name> </request>
SOAP メッセージは、プロバイダー・フローを直接呼び出すためにも提供されています。 これらのメッセージは、コンシューマー・フローが作成して 2 つの SOAPRequest ノードから送信するメッセージと同等のメッセージです。 最初の SOAP メッセージは、アドレスを保管します。
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns3="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <ns3:Person> <ns3:Name>Dave</ns3:Name> <ns3:Address> <ns3:City>Carlisle</ns3:City> <ns3:Street>Welton</ns3:Street> <ns3:Province>Cumbria</ns3:Province> <ns3:PostalCode>NE2 3HP</ns3:PostalCode> <ns3:PhoneNumber> <ns3:Area>1</ns3:Area> <ns3:Prefix>2</ns3:Prefix> <ns3:Local>3</ns3:Local> </ns3:PhoneNumber> </ns3:Address> </ns3:Person> </soapenv:Body> </soapenv:Envelope>
2 番目の入力メッセージは、アドレスを検索します。
<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tns="http://addressbook.com/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <tns:Name>Dave</tns:Name> </soapenv:Body> </soapenv:Envelope>