SOAP データ・ハンドラーは、Connector for Web Services の中核コンポーネントです。コネクターは、ビジネス・オブジェクトを Web サービスに対応する SOAP メッセージに変換するため、SOAP データ・ハンドラーを呼び出します。
コラボレーションが Web サービスとして公開されている場合には、コネクターも SOAP データ・ハンドラーを呼び出します。次にデータ・ハンドラーは、リモート取引先 (または内部クライアント) から送信された SOAP メッセージをビジネス・オブジェクトに変換します。コネクターは、変換されたビジネス・オブジェクトを、Web サービス用に構成されたコラボレーションに渡します。
上記の変換の中で、データ・ハンドラー・メタオブジェクトに格納された情報が重要な役割を果たします。この情報の構成は、製品ファイルのインストール後、ただし始動前に実行してください。カスタム名ハンドラーを追加しないのであれば、デフォルトの SOAP データ・ハンドラー構成を使用して時間を節約することができます。ただし、それぞれのデータ・ハンドラーを変換するたびに特定のメタオブジェクト情報を構成しなければなりません。データ・ハンドラーのメタオブジェクトについて、以下のセクションで説明します。
メタオブジェクトは、構成情報を格納しているビジネス・オブジェクトです。コネクターは、実行時にメタオブジェクトを使用してデータ・ハンドラーを構成し、そのインスタンスを作成します。SOAP データ・ハンドラーもメタオブジェクトを使用することにより、SOAP メッセージの本文を見つけ、本文に対応するビジネス・オブジェクトおよび動詞を決定し、SOAP メッセージ内のビジネス・オブジェクトをエンコードし、またこの章で説明する他のいくつかのタスクを実行します。ここでは、これらのメタオブジェクトの要件について説明します。
図 28 は、Web サービス製品用アダプターに対応するメタオブジェクト構造を示しています。メタオブジェクトは図の中で太字で示され、図の後で説明されています。
本書では、メタオブジェクトについて述べるとき次の用語を使用します。
MO_DataHandler_Default は、コネクターから呼び出されるすべてのデータ・ハンドラーに関する、トップレベル・メタオブジェクトです。これらのメタオブジェクトに設定されている MIME 型により、使用されるデータ・ハンドラーが決まります。コネクター・エージェントは、このメタオブジェクトを使用して、SOAP データ・ハンドラーのインスタンスを作成します。したがって、MO_DataHandler_Default オブジェクトには、xml_soap という名前で MO_DataHandler_DefaultSOAPConfig という型の属性が設定されている必要があります。
MO_DataHandler_Default オブジェクトは、インストール後に構成できます。MO_DataHandler_DefaultSOAPConfig タイプの xml_soap を追加する必要があります。
コネクター・エージェントは、このメタオブジェクトを使用して、実行時に SOAP データ・ハンドラーを作成および構成します。MO_DataHandler_DefaultSOAPConfig には、string 型の属性が 2 つあり、以下を指定します。
これらの属性を、表 44 に示します。
カスタム名ハンドラー (これについては、この章の後半で説明します) をインプリメントしたい場合を除き、MO_DataHandler_DefaultSOAPConfig は、配布およびインストールされたままの状態で使用することができます。構成は不要です。
表 44. MO_DataHandler_DefaultSOAPConfig のメタオブジェクト属性
名前 | 型 | デフォルト値 | 説明 |
---|---|---|---|
ClassName | String | com.ibm.adapters .dataHandlers.xml. soap | createHandler メソッドに渡された MIME 型に基づいて、データ・ハンドラー基本クラスがクラス名を見つけるために使用する標準属性。 |
SOAPName
Handler | String |
| 使用する SOAP 名ハンドラーの名前。 |
SOAP 構成 MO は、あるデータ・ハンドラー変換 (SOAP メッセージからビジネス・オブジェクトへの変換、またはビジネス・オブジェクトから SOAP メッセージへの変換) で行われるデータ・フォーマットの振る舞いを定義します。SOAP 構成 MO は SOAP ビジネス・オブジェクトの子です。これらの子 SOAP 構成 MO は、デフォルトのビジネス・オブジェクトの解決には不可欠なものです。デフォルトのビジネス・オブジェクト解決を使用する場合、すべての子 SOAP 構成 MO は、要求、応答、または障害オブジェクトのいずれの場合にも、BodyName および BodyNS のデフォルト値に関する固有の項目を含んでいなければなりません。表 45 には、これらの属性および SOAP 構成 MO のその他の属性が示されています。
名前 | 必須 | 説明 |
---|---|---|
BodyNS | はい | SOAP 本文に使用されるネーム・スペース。 |
BodyName | はい | SOAP メッセージの本文の名前。SOAP 障害に対して、デフォルト値を soap:fault に設定します。 |
BOVerb | はい | SOAP 構成 MO を含むビジネス・オブジェクトの動詞。 |
TypeInfo | いいえ | SOAP 要素で型情報 (xsi:type) の書き込みおよび読み取りが行われるかどうかを示す、true または false 属性。デフォルト値は false です。 |
TypeCheck | いいえ | このプロパティーは、TypeInfo が true に設定されている場合にのみ読み取られます。指定可能な値は none および strict です。none を指定した場合、このビジネス・オブジェクトに SOAP メッセージを読み込むときに型の検証が省略されます。strict を指定した場合、データ・ハンドラーは、すべての SOAP 型名およびネーム・スペースを、ビジネス・オブジェクトのアプリケーション固有情報と対比して、厳密に検証します。デフォルト値は none です。 |
Style | いいえ | このプロパティーは SOAP メッセージ・スタイルを指定するものであり、BodyName や BodyNS などの他の属性と密接に関連しています。この属性として指定可能な値は、rpc および document です。デフォルト値は rpc です。 |
Use | いいえ | このプロパティーは SOAP メッセージの使用を指定するものであり、ビジネス・オブジェクトから SOAP 本文を構成する方法に影響を及ぼします。指定可能な値は literal および encoded です。デフォルト値は literal です。 |
図 41 は、SOAP ビジネス・オブジェクトと SOAP 構成 MO の関係を示しています。
図 41 は、SOAP 応答ビジネス・オブジェクトとその子ビジネス・オブジェクトを示したものです。子ビジネス・オブジェクト SOAPCfgMO は、ビジネス・オブジェクト応答から SOAP 応答メッセージへの変換を行う際の SOAP データ・ハンドラーの振る舞いを指定する、SOAP 構成 MO です。子 SOAP 構成 MO を指定する属性では、cw_mo_soap で始まる名前と値のペアを使用しなければなりません。
規約により、データ・ハンドラーは、cw_mo_ で始まるビジネス・オブジェクト・レベルのアプリケーション固有情報を読み取るときには、名前と値のペアで指定された子オブジェクトには変換メタオブジェクト情報が含まれているものと認識するため、変換するメッセージの本文の内容としてこの子を含みません。この例で、名前と値のペア cw_mo_jms と cw_mo_soap で指定されている子オブジェクトは、メタオブジェクトとして認識され、SOAP 応答メッセージには書き込まれません。また、SOAP データ・ハンドラーは、cw_mo_soap を除き、cw_mo_ で始まるすべてのビジネス・オブジェクト・レベルのアプリケーション固有の情報を無視します。したがって、SOAP データ・ハンドラーは、cw_mo_tpi のようなアプリケーション固有の情報は無視します。ただし、SOAP データ・ハンドラーは、ビジネス・オブジェクトから SOAP メッセージへの SOAP 応答変換を実行するために、cw_mo_soap で指定された SOAP 構成 MO については、読み取って使用します。
すべての SOAP ビジネス・オブジェクトには子 SOAP 構成 MO が必要であり、これらの SOAP 構成 MO は、ビジネス・オブジェクト・レベルでアプリケーション固有情報として指定されていなければなりません。この作業の大半は、自動的に行われます。SOAP メッセージ用のビジネス・オブジェクトを生成するために WSDL ODA を使用すると、SOAP 構成 MO が自動的に生成されます。
SOAP 構成 MO オプション・プロパティー Style および Use は、SOAP メッセージの作成方法に影響を及ぼします。Style に指定可能な値は rpc および document です。Use に指定可能な値は literal および encoded です。以下のセクションでは、Style および Use の組み合わせが SOAP メッセージの作成に及ぼす影響について説明します。
Style プロパティーを rpc に設定し、Use プロパティーを literal に設定した場合、SOAP メッセージの Body Name および Body Namespace は、それぞれ SOAP 構成 MO の BodyName プロパティーおよび BodyNS プロパティーから読み取られます。
Body Name および Body Namespace がそれぞれ getOrderStatus および OrderStatusNS に解決された rpc/literal スタイル・メッセージの例を以下に示します。
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV=îhttp://schemas.xmlsoap.org/soap/envelope/ì xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:getOrderStatus xmlns:ns1="http://www.ibm.com/"> <Part1> <ns2:Elem1 xmlns:ns2="http://www.ibm.com/elem1"> <Child1>1</Child1> <Child2>2</Child2> </ns2:Elem1> <ns3:Elem1 xmlns:ns3="http://www.ibm.com/elem1"> <Child1>3</Child1> <Child2>4</Child2> </ns2:Elem1> <Elem2>10</Elem2> </Part1> </ns1:getOrderStatus> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
図 42 は、この rpc/literal メッセージに対応するビジネス・オブジェクトを示しています。
Style プロパティーを rpc に設定し、Use プロパティーを encoded に設定した場合、SOAP メッセージの Body Name および Body Namespace は、それぞれ子構成 MO の BodyName プロパティーおよび BodyNS プロパティーから読み取られます。また、SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 属性も Body タグに追加されます。
Body Name および Body Namespace がそれぞれ getOrderStatus および OrderStatusNS に解決された rpc/encoded メッセージの例を以下に示します。
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body SOAP-ENV:encodingStyle= "http://schemas.xmlsoap.org/soap/encoding/"> <ns1:getOrderStatus xmlns:ns1="http://www.ibm.com/"> <Part1 xsi:type="ns1:SOAP_Part1Type"> <ns2:Elem1 SOAP-ENC:arrayType="ns2:SOAP_MaxType[2]" xsi:type="SOAP-ENC:Array" xmlns:ns2="http://www.ibm.com/elem1"> <item> <Child1 xsi:type="xsd:string">1</Child1> <Child2 xsi:type="xsd:string">2</Child2> </item> <item> <Child1 xsi:type="xsd:string">3</Child1> <Child2 xsi:type="xsd:string">4</Child2> </item> </ns2:Elem1> <Elem2 xsi:type="xsd:string">10</Elem2> </Part1> </ns1:getOrderStatus> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
図 43 に、この rpc/encoded メッセージに対応するビジネス・オブジェクトを示します。
Style プロパティーを document に設定し、Use プロパティーを literal に設定した場合、Body Name タグを囲むものは一切存在しません。次に示すのは、上のビジネス・オブジェクトに基づいた、document スタイルの SOAP メッセージの例です。
<?xml version='1.0' encoding='UTF-8'?> <SOAP-ENV:Envelope xmlns:SOAP-ENV= "http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns1:Elem1 xmlns:ns1="http://www.ibm.com/elem1"> <Child1>1</Child1> <Child2>2</Child2> </ns1:Elem1> <ns2:Elem1 xmlns:ns2="http://www.ibm.com/elem1"> <Child1>3</Child1> <Child2>4</Child2> </ns2:Elem1> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
図 44 に、この document/literal メッセージに対応するビジネス・オブジェクトを示します。
図 44. document/literal SOAP 構成 MO
この XML コードでは encodingStyle 属性が設定されていません。
この Style/Use の組み合わせはサポートされません。データ・ハンドラーは、Style を document に設定し、Use を encoded に設定した SOAP 構成 MO を検出すると失敗します。