Soap-encoding

提供:Dev Guides
移動先:案内検索

SOAP-エンコード

SOAPには、データ型をエンコードするための一連のルールが組み込まれています。 SOAPメッセージで、整数、浮動小数点数、倍精度数、配列などの特定のデータ型を示すことができます。

  • SOAPデータ型は、スカラー型と複合型の2つの広範なカテゴリに分類されます。
  • スカラー型には、姓、価格、製品の説明などの値が1つだけ含まれています。
  • 複合タイプには、発注書や株価情報のリストなど、複数の値が含まれます。
  • 複合型は、さらに配列と構造体に細分化されます。
  • SOAPメッセージのエンコードスタイルは、_SOAP-ENV:encodingStyle_属性を介して設定されます。
  • SOAP 1.1エンコードを使用するには、値http://schemas.xmlsoap.org/soap/encoding/を使用します
  • SOAP 1.2エンコードを使用するには、値http://www.w3.org/2001/12/soap-encodingを使用します
  • 最新のSOAP仕様では、XMLスキーマで定義されているすべての組み込み型が採用されています。 それでも、SOAPは、配列や参照など、XMLスキーマで標準化されていない構造を定義する独自の規則を維持しています。

スカラー型

スカラー型の場合、SOAPはXMLスキーマ仕様で指定されているすべての組み込み単純型を採用します。 これには、ストリング、フロート、ダブル、および整数が含まれます。

次の表に、XML Schema Part 0-Primer [[1]]

XMLスキーマに組み込まれた単純型

シンプルタイプ

ひも

これが電動であることを確認してください。

ブール値

true、false、1、0。

浮く

-INF、-1E4、-0、0、12.78E-2、12、INF、NaN。

ダブル

-INF、-1E4、-0、0、12.78E-2、12、INF、NaN。

小数

-1.23、0、123.4、1000.00。

バイナリ

100010

整数

-126789、-1、0、1、126789。

nonPositiveInteger

-126789、-1、0。

negativeInteger

-126789、-1。

long

-1、12678967543233

int

-1、126789675

ショート

-1、12678

byte

-1、126

nonNegativeInteger

0、1、126789

署名なし

0、12678967543233

unsignedInt

0、1267896754

unsignedShort

0、12678

unsignedByte

0、126

正の整数

1、126789。

date

1999-05-31、-05。

time

13:20:00.000、13:20:00.000-05:00

たとえば、これはdoubleデータ型のSOAP応答です-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceResponse
         xmlns:ns1 = "urn:examples:priceservice"
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">
         <return xsi:type = "xsd:double">54.99</return>
      </ns1:getPriceResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

複合タイプ

SOAP配列には非常に特定のルールセットがあり、要素タイプと配列サイズの両方を指定する必要があります。 SOAPは多次元配列もサポートしていますが、すべてのSOAP実装が多次元機能をサポートしているわけではありません。

配列を作成するには、配列の_xsi:type_として指定する必要があります。 配列には、_arrayType_属性も含める必要があります。 この属性は、含まれる要素のデータ型と配列の次元を指定するために必要です。

たとえば、次の属性は、10のdouble値の配列を指定します-

arrayType = "xsd:double[10]"

対照的に、次の属性は文字列の二次元配列を指定します-

arrayType = "xsd:string[5,5]"

以下は、double値の配列を持つサンプルSOAP応答です-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getPriceListResponse
         xmlns:ns1 = "urn:examples:pricelistservice"
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "http://www.w3.org/2001/09/soap-encoding"
            xsi:type = "ns2:Array" ns2:arrayType = "xsd:double[2]">
            <item xsi:type = "xsd:double">54.99</item>
            <item xsi:type = "xsd:double">19.99</item>
         </return>
      </ns1:getPriceListResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

構造体には複数の値が含まれますが、各要素は一意のアクセサー要素で指定されます。 たとえば、製品カタログ内のアイテムを考えます。 この場合、構造体には製品SKU、製品名、説明、および価格が含まれる場合があります。 以下は、そのような構造体がSOAPメッセージでどのように表されるかです-

<?xml version = '1.0' encoding = 'UTF-8'?>
<SOAP-ENV:Envelope
   xmlns:SOAP-ENV = "http://www.w3.org/2001/12/soap-envelope"
   xmlns:xsi = "http://www.w3.org/2001/XMLSchema-instance"
   xmlns:xsd = "http://www.w3.org/2001/XMLSchema">

   <SOAP-ENV:Body>
      <ns1:getProductResponse
         xmlns:ns1 = "urn:examples:productservice"
         SOAP-ENV:encodingStyle = "http://www.w3.org/2001/12/soap-encoding">

         <return xmlns:ns2 = "urn:examples" xsi:type = "ns2:product">
            <name xsi:type = "xsd:string">Red Hat Linux</name>
            <price xsi:type = "xsd:double">54.99</price>
            <description xsi:type = "xsd:string">
               Red Hat Linux Operating System
            </description>
            <SKU xsi:type = "xsd:string">A358185</SKU>
         </return>
      </ns1:getProductResponse>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

-SOAPコードを記述するときは、適切なインデントに注意してください。 構造体の各要素は、一意のアクセサー名で指定されます。 たとえば、上記のメッセージには、名前、価格、説明、およびSKUという4つのアクセサー要素が含まれています。 各要素は独自のデータ型を持つことができます。 たとえば、nameは文字列として指定され、priceはdoubleとして指定されます。