オブジェクト・レベルおよび属性レベルのアプリケーション固有情報 (ASI) を指定して、SOAP データ・ハンドラー機能を拡張および強化することができます。表 46 に、これらの属性を示します。各属性については、以下のセクションで説明します。表の項目はすべて、特に明記されていない限り、属性レベルの ASI です。
ASI | 指定可能な値 | 説明 |
---|---|---|
soap_location | SOAPHeader | このビジネス・オブジェクト属性をヘッダー属性として指定します。 |
headerfault | ストリング | 障害ビジネス・オブジェクト内の対応する SOAP ヘッダーのビジネス・オブジェクト属性名を指定します。 |
elem_name | ストリング | このビジネス・オブジェクト属性に対応する SOAP 要素の名前を指定します。 |
elem_ns | ストリング | このビジネス・オブジェクト属性に対応する SOAP 要素のネーム・スペースを指定します。 |
type_name | ストリング | このビジネス・オブジェクト属性に対応する SOAP 要素の型を指定します。 |
type_ns | ストリング | このビジネス・オブジェクト属性に対応する要素の型ネーム・スペースを指定します。 |
xsdtype | true | このビジネス・オブジェクト属性に対応する要素の型ネーム・スペースとして xsd を指定し、古いバージョンの xsd (1999、2000 など) を最新バージョンの xsd (2001 など) でオーバーライドします。 |
attr_name | ストリング | このビジネス・オブジェクト属性に対応する SOAP 属性の名前を指定します。 |
attr_ns | ストリング | このビジネス・オブジェクト属性に対応する SOAP 属性のネーム・スペースを指定します。 |
arrayof | ストリング | この要素の配列を作成するために使用する必要のある、n カーディナリティーの子ビジネス・オブジェクト属性の名前を指定します。 |
dh_mimetype | ストリング | この複合型の属性を変換するために使用される、データ・ハンドラーの mimeType を指定します。 |
cw_mo_* | ストリング | このビジネス・オブジェクト・レベルの ASI では、SOAP データ・ハンドラーによって内容ではなくメタデータとして解釈される、子構成 MO の名前を指定します。メタデータとして処理される子構成 MO を指定する値は、cw_mo_soap のみです。それ以外のすべての cw_mo_* は、別のコンポーネントを表すため、SOAP データ・ハンドラーの処理対象から除外されます。他の cw_mo* はすべて無視されます。 |
cw_mo_soap | ストリング | このビジネス・オブジェクト・レベルの ASI では、このビジネス・オブジェクトを変換するときに使用する必要のある、子構成 MO 属性の名前を指定します。 |
cw_mo_jms | ストリング | このビジネス・オブジェクト・レベルの ASI では、使用する JMS プロトコル構成 MO の名前を指定します。 |
cw_mo_http | ストリング | このビジネス・オブジェクト・レベルの ASI では、使用する HTTP プロトコル構成 MO の名前を指定します。 |
wrapper | true | このビジネス・オブジェクト内のラッパー・オブジェクトの属性名を指定します。ラッパー・オブジェクトは特定のスキーマ標識で使用され、直列化してはなりません。 |
maxoccurs | 整数 | このビジネス・オブジェクト属性について出現可能な、最大オカレンス件数を指定します。maxoccurs の値によって、ビジネス・オブジェクトにラッパーを含められる場合と、含められない場合があります。 |
minoccurs | 整数 | このビジネス・オブジェクト属性について可能な、最小オカレンス件数を指定します。minoccurs の値によって、ビジネス・オブジェクトにラッパーを含められる場合と、含められない場合があります。 |
all | ストリング | スキーマの all 標識を表す子属性を指定します。 |
choice | ストリング | スキーマの choice 標識を表す子属性を指定します。 |
SOAP データ・ハンドラーは、SOAP メッセージの構成方法を決定するために、ビジネス・オブジェクトの ASI を使用します。別の指示が示されていないかぎり、以下のセクションで述べるすべての ASI は属性レベルの ASI を表し、ストリング・ベースでの比較はすべて、大文字小文字を区別しないで行われます。
このセクションで示す例では、属性名が OrderId であって、SOAP 要素ネーム・スペースの接頭部が ns0 であると想定されています。
<OrderId>1</OrderId>
elem_name=CustOrderId <CustOrderId>2</CustOrderId>
elem_ns= http://www.w3.org/2001/XMLSchema <ns1:OrderId>3</ns1:OrderId>
次の例では、接頭部が見付からない場合が想定されています (ns2 は固有の接頭部を表します)。ASI は以下のようになります。
elem_ns=CustOrderIdNamespace <ns2:OrderId xmlns:ns2="CustOrderIdNamespace">3</ns2:OrderId>
elem_name=CustOrderId;elem_ns=CustOrderIdNamespace <ns2:CustOrderId xmlns:ns2="CustOrderIdNamespace">1</ns2:OrderId>
このセクションの例では、属性名は OrderId、SOAP 要素ネーム・スペースの接頭部は ns0、そして属性タイプは String になっています。
<OrderId xsi:type="xsd:string">1</OrderId>
type_name=CustString <OrderId xsi:type="ns0:CustString">2</OrderId>
type_ns=CustStringNamespace
<OrderId xmlns:ns2="CustStringNamespace" xsi:type=
"ns2:String">3</OrderId>
type_name=CustString;type_ns=CustStringNamespace
<OrderId xmlns:ns2="CustStringNamespace" xsi:type=
"ns2:CustString">1</OrderId>
このセクションの例では、属性名は OrderStaus、SOAP 要素ネーム・スペースの接頭部は ns0、そして属性タイプは OrderStatus になっています。
<OrderStatus xsi:type="ns0:OrderStatus">1</OrderStatus>
type_name=CustOrderStatus <OrderStatus xsi:type="ns0:CustOrderStatus">1</OrderStatus>
type_ns=CustTypeNS
<OrderStatus xsi:type="ns2:SOAP_OrderStatusLine
" xmlns:ns2="CustTypeNS">1</OrderStatus>
type_name=CustOrderStatus;type_ns=CustTypeNS <OrderStatus xsi:type="ns2:CustOrderStatus" xmlns:ns2="CustTypeNS">1</OrderStatus>
このセクションで示すすべての例では、属性名が MultiLines であって、SOAP 要素ネーム・スペースの接頭部が ns0 であると想定されています。属性タイプは OrderStatus であるものとします。
<MultiLines SOAP-ENC:arrayType="ns0:OrderStatus[2]" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="SOAP-ENC:Array">
type_name=CustOrderStatus <MultiLines SOAP-ENC:arrayType="ns0:CustOrderStatus[2]" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="SOAP-ENC:Array">
type_ns=CustTypeNS
<MultiLines SOAP-ENC:arrayType="ns2:OrderStatus[2]"
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/
" xmlns:ns2="CustTypeNS" xsi:type="SOAP-ENC:Array">
type_name=CustOrderStatus;type_ns=CustTypeNS
<MultiLines SOAP-ENC:arrayType="ns2:CustOrderStatus[2
]" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:ns2="CustTypeNS" xsi:type="SOAP-ENC:Array">
単純型、単一カーディナリティー型、および複数カーディナリティー型の場合、型名が SOAP メッセージの現行 XSD に従うときには、xsdtype ASI 属性を true に設定してください。xsdtype プロパティーが読み取られるのは、type_name と type_ns の両方のプロパティーが設定されている場合のみです。type_name および type_ns が指定された場合、SOAP データ・ハンドラーは、最初に、SOAP API を使用してそれらのペアを Java 型にマップすることを試みます。データ・ハンドラーは、その後で、SOAP メッセージのための現行 XSD を使用して、Java 型を SOAP 要素型に変換することを試みます。例えば、現行 XSD が以下のとおりであって
http://www.w3.org/2001/XMLSchema
ASI が以下のとおりである場合、
type_name=timeInstant;type_ns=http://www.w3.org/1999/XMLSchema;xsdtype=true
SOAP メッセージ型名は次のように書かれます。
<OrderDate xsi:type="xsd:dateTime">
これは、2001 XSD における dateTime が、1999 XSD における timeInstant と同等であるためです。
複数カーディナリティー・オブジェクトの場合、次のような単純型の配列を作成することができます。
<MultiLines SOAP-ENC:arrayType="xsd:string[4]" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="SOAP-ENC:Array">
そのためには、type_name プロパティーを、希望する単純型 (例えば、string) に設定し、type_ns プロパティーを適切な XSD 仕様に設定してください。その後で、xsdtype プロパティーを true に設定して、この型が現行の XSD 型に変換されるようにしてください。最後に、arrayOf プロパティーを、単純型値を保持すべきコンテナー内の属性の名前に設定する必要があります。ストリング配列の場合の ASI の例を次に示します。
arrayof=size;type_name=string;type_ns= http://www.w3.org/2001/XMLSchema; xsdtype=true
faultcode、faultactor、faultstring、および detail の各要素は、以下の規則に従います。
ヘッダーの子オブジェクトのレベルおよびそれ以下では、すべての ASI プロパティー (表 46 を参照) を使用することができます。
これはサポートされていません。SOAP 属性を作成するためには、ビジネス・オブジェクト属性が複合 (1 または n カーディナリティー) 型になっていなければなりません。
ビジネス・オブジェクト属性を SOAP 要素ではなく SOAP 属性に変換する ASI を指定することができます。データ・ハンドラーは、単一および n カーディナリティーの複合型に対してのみ SOAP 属性の追加をサポートしています。次の例について考えてみましょう。
<CustInfo City="4" State="5" Street="2" Zip="6"> <Name xsi:type="xsd:string">1</Name> <Street2 xsi:type="xsd:string">3</Street2> </CustInfo>
このビジネス・オブジェクト定義構造 (図 45 の各属性の右側に属性レベル ASI が指定されています) の場合、データ・ハンドラーは以下の処理ステップに従います。
複数カーディナリティー型を処理する際のロジックは、単一カーディナリティー型を処理するロジックと同じです。具体的には、それぞれの <item> タグは複数カーディナリティー・オブジェクトにおける各ビジネス・オブジェクト・インスタンスに対応し、ASI を使用して処理されます。例えば、この複数カーディナリティー・ビジネス・オブジェクト定義構造に、対応する ASI があるとします。
図 46. attr_name 複数カーディナリティー・ビジネス・オブジェクト
データ・ハンドラーに送られたイベントに、この複数カーディナリティー・オブジェクトのインスタンスが 2 つ含まれている場合、次のような SOAP メッセージが作成されます。
<CustInfo> <item City="Armonk" Street="Main Street"> <Name>IBM</Name> <Street2>None</Street2> </item> <item City="Burlingame" State="Ca" Street="577 Airport Blvd" Zip="94010"> <Name>Burlingame Labs</Name> <Street2>Suite 600</Street2> </item> </CustInfo>
item タグが複合要素型として扱われることに注意してください。ビジネス・オブジェクト定義に含まれている属性は、対応する item タグの SOAP 属性になります。
ASI プロパティー arrayof は、SOAP 属性を (child タグで使用するのではなく) 配列要素自体に割り当てるために使用します。単一カーディナリティーの複合型の ASI に arrayof プロパティーを追加してください。arrayof プロパティーの値は、SOAP メッセージで表される複数カーディナリティーの子の名前でなければなりません。SOAP メッセージが作成されると、複数カーディナリティーの子は、その配列の child タグを表すようになります。
arrayof 要素とそれに対応する ASI によるビジネス・オブジェクト定義が、図 47 に示されています。
データ・ハンドラーに送られたイベントに、このカーディナリティー n オブジェクトのインスタンスが 2 つ含まれている場合、次のような SOAP メッセージが作成されます。
<Customer ID="12"> <CustInfo City="4" State="5" Street="2" Zip="6"> <Name>1</Name> <Street2>3</Street2> </CustInfo> <CustInfo City="10" State="11" Street="8" Zip="12"> <Name>7</Name> <Street2>9</Street2> </CustInfo> </Customer>
arrayof プロパティーを使用すると、item 以外の名前の配列項目を作成できることに注目してください。この例では、item タグが CustInfo タグに置き換えられています。この要素名は、ASI プロパティー arrayof が指すビジネス・オブジェクト属性の名前から派生したものです。
作成される SOAP 属性に対応したネーム・スペースを指定することをお勧めします。そのためには、単純型の場合には ASI プロパティー attr_ns を指定します。データ・ハンドラーが attr_ns プロパティーを処理するのは、同じ属性の ASI に attr_name が存在する場合のみです。attr_name および attr_ns には、以下の規則が適用されます。
<CustInfo Street="577 Airport"></CustomerInfo>
<CustInfo ns2:Street="577 Airport" xmlns:ns2=
"AttrNS"></CustomerInfo>
SOAP データ・ハンドラーを使用して別のデータ・ハンドラーを呼び出し、ビジネス・オブジェクトを、対応するデータ・ハンドラーが存在する任意の形式に書き出すことができます。これは、SOAP 子ビジネス・オブジェクトを SOAP ストリングに変換するときに、エンコードされたテキストを SOAP メッセージに追加することによって行います。
SOAP 要素の値をエンコードすることのできるフォーマットの 1 つに、RNIF 文書があります。この機能を使用するためには、任意のレベルの SOAP 子ビジネス・オブジェクトに RNIF BO を追加してください。この RNIF ビジネス・オブジェクトをストリングに変換するときに別のデータ・ハンドラーを呼び出すように SOAP データ・ハンドラーに通知するためには、その属性の ASI に dh_mimetype プロパティーを追加します。ASI プロパティー dh_mimetype の値は、MO_DataHandler_Default メタオブジェクトで指定された適格な mimeType でなければなりません。この mimeType は、ビジネス・オブジェクトを処理するために呼び出すデータ・ハンドラーを判別するために使用されます。
図 48 に示す SOAP 子ビジネス・オブジェクトでは、CustomerInfo は複合子であり、RNET_Pip3A2PriceAndAvailabilityQuery は RNIF ビジネス・オブジェクトになっています。
図 48. dh_mimetype を有する RNIF ビジネス・オブジェクト
このビジネス・オブジェクトから作成される SOAP メッセージは、次のようになります。
<CustomerInfo> <Name>IBM Corporation</Name> <CustID>95626</CustID> <RNIFexample xsi:type="xsd:base64Binary">1AWERYER238W98EYR9238728374871892787ASRJK23423 JKAWERJ234AWERIJHI423488R4HASF1AWERYER238W98EYR9238728374871892787ASRJK234 34JKAWERJ234AWERIJHI423488R4HASF1AWERYER238W98EYR9238728374871892787ASRJK2 4234JKAWERJ234AWERIJHI423488R4HASF1AWERYER238W98EYR9238728374871892787ASRJ 234234JKAWERJ234AWERIJHI423488R4HASFWR234 </RNIFexample> </CustomerInfo>
RNIF サンプル要素には RNIF エンコード・ストリングが含まれていますが、これは、その要素値としてエンコードされた base64 バイナリーだったものです。また、ASI プロパティー elem_name、elem_ns、type_name、type_ns、および xsdtype は、このビジネス・オブジェクト属性との関係を維持します。この例では、メッセージが作成されると、指定された elem_name が SOAP 要素の名前になります。
type_name および type_ns を xsd:base64Binary に解決されるように設定すると、SOAP データ・ハンドラーは、対応する要素の値を設定する前に、ビジネス・オブジェクトから得られた値をエンコードします。データ・ハンドラーは Apache API を使用してレジストリーに対して base64Binary シリアライザーの照会を行い、呼び出し先データ・ハンドラーから戻されたストリングをシリアライズし、要素の値を設定します。
以下のセクションでは、スキーマ complexType の標識がビジネス・オブジェクトに与える影響について説明します。標識には以下のものがあります。
maxOccurs 標識は、1 つの複合型の中である要素が出現することのできる、最大回数を表します。 minOccurs 標識は、1 つの複合型の中である要素が出現する必要のある、最小回数を表します。
次のスキーマを検討してください。
<xs:element name="Address" type="Address"> <xs:complexType name="Address"> <xs:sequence> <xs:element name="AddressLine" type="xsd:string" maxOccurs="10"/> <xs:element name="SuiteNumber" type="xsd:string" minOccurs="3" maxoccurs="unbounded"/> <xs:element name="City" type="xsd:string"/> </xs:sequence> </xs:complexType> </xs:element>
上の例では、Address 要素内で AddressLine 要素が最大 10 回出現することができ、SuiteNumber 要素が少なくとも 3 回出現することを示しています。このスキーマに対応するビジネス・オブジェクトでは、次の ASI を備えたそれぞれの maxoccurs/minoccurs 標識ごとに、N カーディナリティーのラッパー・オブジェクトが 1 つ存在しなければなりません。
maxOccurs=N;wrapper=true
または
minOccurs=3;wrapper=true;
wrapper=true ASI は、このオブジェクトがラッパーであること、およびその理由から、SOAP メッセージに明示的に書き込まれないことを示しています。明示的な書き込みが行われないため、このラッパー・オブジェクトには、単純型の子が 1 つ存在しなければなりません。実行時に SOAP からビジネス・オブジェクトへの変換を行うために、データ・ハンドラーは、ラッパーの子オブジェクトを N 個読み取り、それぞれの子オブジェクトごとに対応する要素を作成します。ビジネス・オブジェクトから SOAP メッセージへの変換を行う際には、データ・ハンドラーは、検出されたそれぞれの要素ごとに、N カーディナリティー・ラッパー内に子オブジェクトを作成します。
これに対応する SOAP ビジネス・オブジェクトは、図 49 のようなものとなります。
図 49. SOAP ビジネス・オブジェクトにおける単純型 ASI の minOccurs および maxOccurs
図 49 に示したビジネス・オブジェクトに対応する SOAP メッセージは、次のようになります。
<Address xsi:type="ns0:Address"> <AddressLine xsi:type="xsd:string">Line1</AddressLine> <AddressLine xsi:type="xsd:string">Line2</AddressLine> <SuiteNumber xsi:type="xsd:string">600</SuiteNumber> <SuiteNumber xsi:type="xsd:string">650</SuiteNumber> <SuiteNumber xsi:type="xsd:string">700</SuiteNumber> <City xsi:type="xsd:string">San Francisco</City> </Address>
<maxOccurs> 標識は、1 つの複合型の中である要素が出現することのできる、最大回数を表します。<minOccurs> 標識は、1 つの複合型の中である要素が出現する必要のある、最小回数を表します。次のスキーマにおける maxOccurs 標識について検討してください。
<xs:element name="Address" type="Address"> <xs:complexType name="Address"> <xs:sequence> <xs:element name="AddressInfo" type="AddressInfo" maxOccurs="3"/> <xs:element name="City" type="xsd:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:complexType name="AddressInfo"> <xs:sequence> <xs:element name="StreetLine" type="xsd:string"/> </xs:sequence> </xs:complexType> </xs:element>
上の例では、Address 要素内で AddressInfo 複合型要素が最大 3 回出現することができることを示しています。このスキーマに対応するビジネス・オブジェクトには、ラッパー・オブジェクトがありません。complexType の AddressInfo 自体が N カーディナリティーの要素になりうるためです。N カーディナリティーの属性には、maxoccurs=3 という ASI が含められます。
図 50 は、これに対応する SOAP ビジネス・オブジェクトを示しています。
図 50. SOAP ビジネス・オブジェクトにおける複合型 ASI の minOccurs および maxOccurs
図 50 に示したビジネス・オブジェクトに対応する SOAP メッセージは、次のようになります。
<Address xsi:type="ns0:Address"> <AddressInfo xsi:type="ns0:AddressInfo"> <StreetLine xsi:type="xsd:string">100 Market St.</ StreetLine> <StreetLine xsi:type="xsd:string">Apt 15</ StreetLine> </AddressInfo> <City xsi:type="xsd:string">San Francisco</City> </Address>
all 標識は、デフォルトでは、この complexType に関する子要素を任意の順序で指定できること、およびそれぞれの子要素がゼロまたは 1 回出現しなければならないことを指定します。次のスキーマについて考えてみましょう。
<complexType name="Item"> <all> <element name="quantity" type="xsd:int"/> <element name="product" type="xsd:string"/> </all> </complexType>
上記の例は、SOAP メッセージ内で要素 quantity および product を任意の順序で表示できることを示しています。quantity 要素を最初に表示して、product 要素を 2 番目に表示することも、逆の順序で表示することもできます。
図 51 は、このスキーマに対応するビジネス・オブジェクトを表しています。
図 51. SOAP ビジネス・オブジェクトにおける all 標識 ASI
対応する SOAP メッセージは次のようになります。
<Item xsi:type="ns0:Item"> <quantity xsi:type="xsd:string">12</quantity> <product xsi:type="xsd:string">2</product> </Item>
sequence 標識は、子要素が、complexType で指定されたとおりの順序で現れなければならないことを示します。
<complexType name="Item"> <sequence> <element name="quantity" type="int"/> <element name="product" type="string"/> </sequence> </complexType>
SOAP データ・ハンドラーは、この標識のための特別な ASI またはラッパー・オブジェクトを必要としません。デフォルトでは、データ・ハンドラーは、ビジネス・オブジェクトで指定されたとおりの順序で SOAP 要素の読み取りおよび書き込みを行います。
choice 標識は、complexType 内の要素のうちの 1 つだけを SOAP メッセージに含めることができることを示します。次のスキーマについて考えてみましょう。
<complexType name="Item"> <choice> <element name="quantity" type="int"/> <element name="product" type="string"/> </choice> </complexType>
SOAP データ・ハンドラーは、この標識のための特別な ASI またはラッパー・オブジェクトを必要としません。ビジネス・オブジェクトを SOAP メッセージに変換するときに、データ・ハンドラーは処理を中断し、SOAP メッセージにどの要素を含めるのかをユーザーが選択できるようにします。SOAP メッセージをビジネス・オブジェクトに変換するときには、データ・ハンドラーは既存の要素を読み取り、それに対応する属性を取り込みます。
SOAP データ・ハンドラーは、受け取った SOAP メッセージを読み取って検証するために、ビジネス・オブジェクトの ASI を使用します。SOAP データ・ハンドラーによる ASI の検証には、以下の規則が適用されます。
単純、カーディナリティー 1、およびカーディナリティー n の属性の検証には、以下の規則が適用されます。
単純、カーディナリティー 1、およびカーディナリティー n の属性の検証には、以下のケースが当てはまります。
以下のセクションでは、type_name および type_ns の検証について説明します。
xsdType が true の場合、type_name および type_ns の検証には以下の規則が適用されます。
xsdType が false の場合、type_name および type_ns の検証には以下の規則が適用されます。
xsdType が true の場合、type_name および type_ns の検証には以下の規則が適用されます。
xsdType が false の場合、type_name および type_ns の検証には以下の規則が適用されます。
SOAP メッセージをビジネス・オブジェクトに読み込む際には、SOAP 属性を探すために個々の SOAP 要素が検索されます。SOAP 属性が検出された場合は、対応するビジネス・オブジェクトから得られた attr_name プロパティー値と比較されます。例えば、次の SOAP メッセージについて考えてみましょう。
<CustInfo City="4" State="5" Street="2" Zip="6"> <Name xsi:type="xsd:string">1</Name> <Street2 xsi:type="xsd:string">3</Street2> </CustInfo>
ここで、図 52 に示すビジネス・オブジェクト定義構造について考えてみます (各属性の右に属性レベル ASI が指定されています)。
図 52. attr_name および attr_ns の検証
データ・ハンドラーは以下の処理ステップに従います。
データ・ハンドラーは、所定の要素の SOAP 属性について繰り返し処理を行います。属性に出会うたびに、データ・ハンドラーは、対応する属性のためのビジネス・オブジェクトを検索します。ビジネス・オブジェクトが見付かったら、そのビジネス・オブジェクト属性に SOAP 属性の値を取り込みます。対応するビジネス・オブジェクト属性が見付からない場合、データ・ハンドラーは次の SOAP 属性に移って処理を続けます。
SOAP データ・ハンドラーは、別のデータ・ハンドラーを使用して、エンコードされた要素値を、SOAP メッセージからビジネス・オブジェクトに読み込むことができます。例えば、SOAP 要素の値がエンコードされるフォーマットの 1 つに、RNIF 文書があります。この機能を使用するためには、RNIF ビジネス・オブジェクトを任意のレベルの SOAP 子ビジネス・オブジェクトに追加します。この RNIF エンコード・ストリングを RNIF ビジネス・オブジェクトに変換するときに別のデータ・ハンドラーを使用しなければならないことを SOAP データ・ハンドラーに通知するためには、その属性の ASI に dh_mimetype プロパティーを追加する必要があります。dh_mimetype ASI の値は、MO_DataHandler_Default ビジネス・オブジェクトで指定された適格な mimeType でなければなりません。mimeType は、ストリング上で使用するデータ・ハンドラーを判別するために使用されます。例えば、次の SOAP メッセージでは、RNIFExample が SOAP 要素で、ここには RNIF エンコード・ストリングが含まれています。
<CustInfo> <Name>IBM Corporation</Name> <CustID>95626</CustID> <RNIFexample xsi:type="xsd:base64Binary"> 1AWERYER238W98EYR9238728374871892787ASRJK234234JKAWER J234AWERIJHI423488R4HASF1AWERYER238W98EYR923872837487 1892787ASRJK234234JKAWERJ234AWERIJHI423488R4HASF1AWER YER238W98EYR9238728374871892787ASRJK234234JKAWERJ234A WERIJHI423488R4HASF1AWERYER238W98EYR92387283748718927 87ASRJK234234JKAWERJ234AWERIJHI423488R4HASFWR234 </RNIFexample> </CustomerInfo>
SOAP ビジネス・オブジェクトは、図 53 のようなものとなります。
RNIFExample 要素には、その要素値として RNIF エンコード・ストリングが含まれています。また、ASI プロパティー elem_name、elem_ns、type_name、type_ns、および xsdtype は、このビジネス・オブジェクト属性との関係を依然として維持しています。
SOAP からビジネス・オブジェクトへの変換では、SOAP データ・ハンドラーと Web サービス・コネクターは、情報を交換してビジネス・オブジェクト名を解決する特殊な契約に準拠しています。このコネクターは、SOAP データ・ハンドラーに、BodyName と BodyNamespace のペアにマップされるビジネス・オブジェクト名のリストを提供します。さらに、TLO に defaultfault ビジネス・オブジェクトが設定されている場合は、この情報がデータ・ハンドラーに渡されます。この情報が渡されると、SOAP データ・ハンドラーは、以下のステップに従って処理します。