您可指定物件層次及屬性層次的應用程式特有資訊 (ASI),以擴充及加強 SOAP 資料處理常式功能。表 45 顯示這些屬性,將於下面的一節中加以討論。 表格中的所有輸入項目都是屬性層次的 ASI,除非另有指定。
ASI | 可能值 | 說明 |
---|---|---|
soap_location | SOAPHeader | 將此商業物件屬性指定為標頭屬性 |
headerfault | String | 指出錯誤 BO 中對應 SOAP 標頭的 B0 屬性名稱 |
elem_name | String | 指定對應此 BO 屬性之 SOAP 元素的名稱 |
elem_ns | String | 指定對應此 BO 屬性之 SOAP 元素的名稱空間 |
type_name | String | 指定對應此 BO 屬性之 SOAP 元素的類型 |
type_ns | String | 指定對應此 BO 屬性之元素的類型名稱空間 |
xsdtype | true | 指定 xsd 作為對應此 BO 屬性之元素的名稱空間,並以最新版的 xsd (例如:2001) 置換舊版的 xsd (例如:1999、2000 等等)。 |
attr_name | String | 指定對應此 BO 屬性之 SOAP 屬性的名稱 |
attr_ns | String | 指定對應此 BO 屬性之 SOAP 屬性的名稱空間 |
arrayof | String | 指定必須作為簡式類型陣列項目的位置保留區之 n 基數子項商業物件屬性的名稱 |
dh_mimetype | String | 指定將用來轉換此複式類型屬性之資料處理常式的 mimeType |
cw_mo_* | String | 此商業物件層次 ASI 指定 Child Config MO 的名稱,SOAP 資料處理常式會將該名稱解譯為 Meta 資料,而不是內容。 只有 cw_mo_soap 可指定被處理為 Meta 資料的 Child Config MO;所有其他的 cw_mo_* 皆 指定不同的元件,所以不包含於 SOAP 資料處理常式的處理程序內。所有其他 cw_mo* 都會被忽略。 |
cw_mo_soap | String | 此商業物件層次 ASI 指定於轉換此商業物件時,所應使用之 Child Config MO 屬性的名稱。 |
cw_mo_jms | String | 此商業物件層次 ASI 指定所要使用之 JMS Protocol Config MO 的名稱 |
cw_mo_http | String | 此商業物件層次 ASI 指定所要使用之 HTTP Protocol Config MO 的名稱 |
wrapper | true | 指定此商業物件中之封套物件的屬性名稱。 封套物件用於特定的綱目指示元,絕不可序列化 |
maxoccurs | 整數 | 指定此商業物件屬性可能出現的次數上限。依據 maxoccurs 的值,商業物件可能會有,也可能沒有封套。 |
minoccurs | 整數 | 指定此商業物件屬性可能出現的次數下限。 依據 minoccurs 的值,物件可能會有,也可能沒有封套。 |
全部 | String | 指定代表綱目中之 all 指示元的子屬性。 |
choice | String | 指定代表綱目中之 choice 指示元的子屬性。 |
SOAP 資料處理常式使用商業物件的 ASI 來決定建構 SOAP 訊息的方法。 除非另有說明,否則下面一節中討論的所有 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">
若為簡式、單一及多重基數類型,請將類型名稱的 xsdtype ASI 屬性設定為 true, 以符合 SOAP 訊息的現行 XSD。 當 type_name 和 type_ns 內容皆已設定,則 xsdtype 為唯讀內容。 在已指定 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 內容 (請參閱表 45)。
這個 XML 綱目案例之 complexTypes 的 simpleContent 延伸或限制有值和屬性。 例如,請考量下列 SOAP 標籤:
<size system="us">10</size>
它是根據下列綱目:
<complexType name="SizeType"> <simpleContent> <extension base="int"> <attribute name="system" type="string"/> </extension> </simpleContent> </complexType> <element name="size" type="ns:SizeType"/>
對應於複式類型 (具有簡式內容延伸或限制) 的商業物件, 除了對應於複式類型屬性的屬性之外,還必須包含一個其他屬性。 這個其他屬性必須包含簡式內容值 (在上述範例中為 10,也就是元素大小的值)。 將商業物件對應於複式類型作為其類型的商業物件屬性,會將 elem_value=simpleContentValue 作為它的屬性層次 ASI。
圖 45 顯示對應的商業物件。
您可以指定 ASI,將商業物件屬性轉換為 SOAP 屬性,而非轉換為 SOAP 元素。 資料處理常式僅支援將 SOAP 屬性新增至複式單一及 n-card 類型。 請參酌下列範例:
<CustInfo City="4" State="5" Street="2" Zip="6"> <Name xsi:type="xsd:string">1</Name> <Street2 xsi:type="xsd:string">3</Street2> </CustInfo>
假設商業物件定義結構如下 (屬性層次 ASI 指定於圖 46 中, 每個屬性的右邊),資料處理常式會遵循下列處理步驟:
處理多重基數類型的邏輯,與處理單一基數類型的邏輯相同。 尤其,每個 <item> 標籤都會對應於多重基數物件中的每個商業物件實例, 且皆使用 ASI 加以處理。 例如,假設此多重基數商業物件定義結構具有對應的 ASI:
若傳送至資料處理常式的事件具有此多重基數物件的二個實例,則所建立的 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 標籤會被視為複式元素類型。BO 定義中的任何屬性將成為對應之 item 標籤的 SOAP 屬性。
只有在 SOAP 編碼簡式類型陣列的狀況下,才應該使用 arrayof ASI 內容。 例如,類似下列序列化:
<CustomerNames SOAP-ENC:arrayType="xsd:string[4]" xmlns:SOAP-ENC= "http://schemas.xmlsoap.org/soap/encoding/" xsi:type="SOAP-ENC:Array"> <item xsi:type="xsd:string">value1</item> <item xsi:type="xsd:string">value2</item> <item xsi:type="xsd:string">value3</item> <item xsi:type="xsd:string">value4</item> </CustomerNames>
就需要商業物件定義,如圖 48 中的商業物件定義:
(為了明確起見,商業物件會從「要求」層次顯示)。
<CustomerNames SOAP-ENC:arrayType="xsd:string[4]" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="SOAP-ENC:Array"> <name xsi:type="xsd:string">value1</name> <name xsi:type="xsd:string">value2</name> <name xsi:type="xsd:string">value3</name> <name xsi:type="xsd:string">value4</name> </CustomerNames>
您可能需要提供一個對應於已建立之 SOAP 屬性的名稱空間。 若要這麼做,您可以為簡式類型指定 attr_ns ASI 內容。 只有當 attr_name 存在於相同屬性的 ASI 時,資料處理常式才會處理 attr_ns 內容。 attr_name 及 attr_ns 遵循下列規則:
<CustInfo Street="577 Airport"></CustomerInfo>
<CustInfo ns2:Street="577 Airport" xmlns:ns2=
"AttrNS"></CustomerInfo>
SOAP 資料處理常式可呼叫另一個資料處理常式, 將商業物件撰寫為目前存在之資料處理常式的任何格式。 若要這麼做,請在將 SOAP 子項商業物件轉送至「SOAP 字串」時, 將已編碼的文字新增至 SOAP 訊息。
RNIF 文件為用來將 SOAP 元素值編碼的其中一種格式。 若要使用這項功能,請在任何層次的 SOAP 子項商業物件中,新增 RNIF BO。 若要通知 SOAP 資料處理常式,於 RNIF 商業物件轉換成字串時, 呼叫另一個資料處理常式,請在屬性的 ASI 中,新增 dh_mimetype 內容。 dh_mimetype ASI 內容的值必須是指定於 MO_DataHandler_Default Meta 物件中的合法的 mimeType。 mimeType 可用來決定要呼叫哪一個資料處理常式來處理商業物件。
圖 49 顯示 SOAP 子項商業物件, 其中 CustomerInfo 為複式子項,RNET_Pip3A2PriceAndAvailabilityQuery 為 RNIF 商業物件:
圖 49. 具有 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 二進位碼來編碼為其元素值。 另請注意,elem_name、elem_ns、type_name、type_ns 及 xsdtype ASI 內容仍會為此商業物件屬性保持其關聯性。 於此範例中,所指定的 elem_name 會在建立訊息時,指定 SOAP 元素的名稱。
當您設定 type_name 及 type_ns 來解析成 xsd:base64Binary 時, SOAP 資料處理常式會先從商業物件來將該值編碼,再設定對應元素的值。 資料處理常式使用 Apache API 來查詢 base64Binary 序列化常式的登錄, 將所呼叫之資料處理常式傳回的字串序列化,並設定元素的值。
下面的一節將討論綱目 complexType 指示元對商業物件的影響。指示元包含:
maxOccurs 指示元指定元素可出現在複式類型中的次數上限。 minOccurs 指示元指定元素應出現在複式類型中的次數下限。
請參酌下面這個綱目:
<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>
上述範例指出 AddressLine 元素最多可出現在 Address 元素中 10 次, 而 SuiteNumber 元素則必須至少出現 3 次。 對應此綱目的商業物件必須針對具有下列 ASI 的每個 maxoccurs/minoccurs 指示元, 各有一個 N 基數封套物件:
maxOccurs=N;wrapper=true
或
minOccurs=3;wrapper=true;
wrapper=true ASI 指示此物件是一個封套,因此不會明確地寫入 SOAP 訊息中。 但是此封套物件中必須有一個簡式類型的子項。在執行時期,為了進行從 SOAP 轉換成商業物件的作業, 資料處理常式會讀取封套的 N 子項物件,並為每個子項物件建立對應的元素。 當執行從商業物件轉換成 SOAP 訊息的作業時,資料處理常式會針對它所遇到的每個元素, 在 N 基數封套中建立子項物件。
對應的 SOAP 商業物件類似圖 50 所顯示的物件。
圖 50. SOAP 商業物件中之簡式類型 ASI 的 minOccurs 及 maxOccurs
對應於圖 50 中所顯示之商業物件的 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> 指示元指定元素可出現在複式類型中的次數上限。 <minOccurs> 指示元指定元素應出現在複式類型中的次數下限。 請參酌下列綱目中的 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>
上述範例指出 AddressInfo 複式類型元素最多可出現在 Address 元素中 3 次。 此綱目的對應商業物件將不會有封套物件,因為 complexType AddressInfo 本身即屬於 N 基數。 下列 ASI 將會置於 N 基數屬性中:maxoccurs=3
圖 51 顯示對應的 SOAP 商業物件。
圖 51. SOAP 商業物件中之複式類型 ASI 的 minOccurs 及 maxOccurs
對應於圖 51 中所顯示之商業物件的 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 的子元素可以任何順序出現, 而每個子元素必須出現零或一次。請參酌下列綱目:
<complexType name="Item"> <all> <element name="quantity" type="xsd:int"/> <element name="product" type="xsd:string"/> </all> </complexType>
上述範例指示元素 quantity 及 product 可於 SOAP 訊息中,以任何順序出現。 quantity 元素可先出現,然後出現 product 元素,反之亦然。
圖 52 顯示對應於此綱目片段的商業物件。
對應的 SOAP 訊息片段如下:
<Item xsi:type="ns0:Item"> <quantity xsi:type="xsd:string">12</quantity> <product xsi:type="xsd:string">2</product> </Item>
SOAP 資料處理常式可處理具有 'all' 內容模型的複式類型陣列內容, 如本節所說明。在範例中,ArrayOfSOAPStruct 包含具有 'all' 內容模型的 SOAPStruct。
<complexType name="SOAPStruct"> <all> <element name="varString" type="string" /> <element name="varInt" type="int" /> <element name="varFloat" type="float" /> </all> </complexType> <complexType name ="ArrayOfSOAPStruct'"> <complexContent> <restriction base='SOAP-ENC:Array'> <attribute ref='SOAP-ENC:arrayType' wsdl:arrayType='typens:SOAPStruct[]'/> </restriction> </complexContent> </complexType>
SOAP 資料處理常式必須在序列化上產生下列 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:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <SOAP-ENV:Body> <ns0:echoStructArray xmlns:ns0="http://soapinterop.org/"> <inputStructArray SOAP-ENC:arrayType="ns1:SOAPStruct[2]" xmlns:ns1="http://soapinterop.org/xsd" xsi:type="SOAP-ENC:Array"> <item> <ns1:varFloat xsi:type="xsd:string">1.1</ns1:varFloat> <ns1:varInt xsi:type="xsd:string">1</ns1:varInt> <ns1:varString xsi:type="xsd:string">hi</ns1:varString> <item> <item> <ns1:varString xsi:type="xsd:string">hello</ns1:varString> <ns1:varInt xsi:type="xsd:string">1</ns1:varInt> <ns1:varFloat xsi:type="xsd:string">1.1</ns1:varFloat> </item> </inputStructArray> </ns0:echoStructArray> </SOAP-ENV:Body> </SOAP-ENV:Envelope>
在此範例中,echoStructArray 是作業的名稱,而 inputStructArray 是參數名稱,類型為 ArrayOfSOAPStruct。
sequence 指示元指定子元素必須以 complexType 中所指定的順序出現。
<complexType name="Item"> <sequence> <element name="quantity" type="int"/> <element name="product" type="string"/> </sequence> </complexType>
SOAP 資料處理常式不需要特殊的 ASI,或是此指示元的封套物件。 依預設,資料處理常式會以商業物件中所指定的順序來讀取及寫入 SOAP 元素。
choice 指示元指定僅有其中一個 complexType 中的元素可出現於 SOAP 訊息中。 請參酌下列綱目:
<complexType name="Item"> <choice> <element name="quantity" type="int"/> <element name="product" type="string"/> </choice> </complexType>
SOAP 資料處理常式不需要特殊的 ASI,或是此指示元的封套物件。 將商業物件轉換為 SOAP 訊息時,資料處理常式會延遲,讓您選擇哪些元素應出現在 SOAP 訊息中。 將 SOAP 訊息轉換成商業物件時,資料處理常式會讀取現有的元素,並移入其所對應的屬性。
模型群組 (sequence、choice、group 及 all) 具有 minOccurs 及 maxOccurs 屬性。minOccurs 及 maxOccurs 的預設值是 one。 對於 all 群組來說,maxOccurs 只能採用 one 這個值。 WSDL ODA 及 SOAP 資料處理常式可支援 sequence、choice 及 group 上的 maxOccurs 所有可能值。
SOAP 資料處理常式使用商業物件的 ASI 來讀取及驗證送入的 SOAP 訊息。 以下為 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 屬性。 若找到了,則將這些屬性與對應 BO 的 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>
現在請參照圖 53 中所顯示的商業物件定義結構 (屬性層次 ASI 指定在每個屬性的右邊)。
資料處理常式將遵循下列處理步驟:
資料處理常式會在所有 SOAP 屬性中巡迴,尋找給定的元素。 每遇到一個屬性,資料處理常式就會在商業物件中搜尋對應的屬性。 若找到了,則將該 SOAP 屬性的值移入商業物件屬性。 若找不到對應的商業物件屬性,資料處理常式就會繼續尋找下一個 SOAP 屬性。
SOAP 資料處理常式可以使用另一個資料處理常式, 將已編碼的元素值從 SOAP 訊息讀取至商業物件中。 例如,RNIF 文件可能是將 SOAP 元素值編碼的其中一種格式。 若要使用此功能,可於任何層次的 SOAP 子項商業物件中,新增 RNIF 商業物件。 若要對 SOAP 資料處理常式表示,在將此 RNIF 編碼的「字串」轉換成 RNIF 商業物件時, 必須使用另一個資料處理常式,則您必須將 dh_mimetype 內容新增至屬性的 ASI。 dh_mimetype ASI 的值應是指定於 MO_DataHandler_Default 商業物件中的合法 mimeType。 mimeType 可用來決定要用哪個資料處理常式來處理「字串」。 例如,下列的 SOAP 訊息,其中 RNIFExample 是包含 RNIF 編碼「字串」的 SOAP 元素:
<CustInfo> <Name>IBM Corporation</Name> <CustID>95626</CustID> <RNIFexample xsi:type="xsd:base64Binary"> 1AWERYER238W98EYR9238728374871892787ASRJK234234JKAWER J234AWERIJHI423488R4HASF1AWERYER238W98EYR923872837487 1892787ASRJK234234JKAWERJ234AWERIJHI423488R4HASF1AWER YER238W98EYR9238728374871892787ASRJK234234JKAWERJ234A WERIJHI423488R4HASF1AWERYER238W98EYR92387283748718927 87ASRJK234234JKAWERJ234AWERIJHI423488R4HASFWR234 </RNIFexample> </CustomerInfo>
SOAP 商業物件看起來如圖 54 所顯示。
請注意,RNIFExample 元素包含 RNIF 編碼的「字串」,以作為其元素值。 另請注意,elem_name、elem_ns、type_name、type_ns 及 xsdtype ASI 內容仍會為 此商業物件屬性保持其關聯性。
為了進行由 SOAP 轉換為商業物件的作業,SOAP 資料處理常式及 Web 服務連接器會 遵循一個特殊的交換資訊合約,解析商業物件名稱。 連接器會為 SOAP 資料處理常式,提供一個對映至 BodyName 和 BodyNamespace 配對的 商業物件名稱清單。 此外,若 TLO 中設定了 defaultfault 商業物件,則將此資訊傳遞給資料處理常式。 在已提供此資訊的情況下,SOAP 資料處理常式會使用下列步驟來進行處理程序: