Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

生成された WSDL の詳細

この付録では、参考として、Caché Web サービスのサンプル WSDL ドキュメントから一部をいくつか取り上げ、キーワードとパラメータがそれらの部分に及ぼす影響に関する情報を示します。以下のトピックについて説明します。

Web メソッドのシグニチャも WSDL に影響しますが、この付録ではその詳細には触れません。

WSDL は、Web サービスで使用するあらゆる XML 対応クラスの XML プロジェクションの影響も受けます。"オブジェクトの XML への投影" のドキュメントを参照してください。

Note:

Web サービスにコンパイル済みのポリシー構成クラスがある場合、<binding> セクションには、<wsp:Policy> 形式の要素も含まれます。このドキュメントでは、ポリシーがどのように WSDL に影響するかについては触れません。それは WS-SecurityPolicy などの仕様によって決まるからです。

ポリシー構成については、"Caché Web サービスの保護" を参照してください。

利便性のために WSDL ドキュメントが生成されますが、これは W3C 仕様では要求されていません。これに関する重要な注意事項は、このドキュメントで前述した “WSDL の表示” を参照してください。

WSDL ドキュメントの概要

Web サービスには、マシンが読み取ることができる形式で記述されているインタフェース定義である WSDL ドキュメント があります。WSDL ドキュメントは、Web サービス記述言語の規格に従って XML で記述されます。これにより、Web サービスとそのクライアントの対話方法に関するコントラクトが定義されます。

WSDL には、以下を定義する追加要素を記述したルート <definitions> 要素があります。

  • Web サービスの入力または出力に必要な XML タイプまたは要素の定義。これは、基本の XML タイプに関して定義されます。<types> 要素には、XML タイプ、要素、またはその両方を必要に応じて定義する <schema> 要素が 1 つ以上記述されています。

  • Web サービスで使用するメッセージの定義。各 Web メソッドには 1 つまたは 2 つのメッセージが必要です。Web メソッドを呼び出す要求メッセージと、応答で使用する応答メッセージです。各メッセージは、XML タイプまたは XML 要素に関して定義されます。

  • Web サービスで使用するポート・タイプの定義。各ポートは、1 つまたは複数の処理を定義します。処理は、Web メソッドに対応しており、対応するメッセージを使用します。

    一般に、WSDL には複数の <portType> 要素を含めることができますが、Caché Web サービスの WSDL で含めることができるのは 1 つだけです。

  • Web サービスの bindings 要素。これは、特定のポート・タイプによって定義された処理とメッセージの、メッセージ形式とプロトコルの詳細を定義します。

    一般に、WSDL には複数の <binding> 要素を含めることができますが、Caché Web サービスの WSDL で含めることができるのは 1 つだけです。

  • 前述のコンポーネントに関する、Web サービスの正式な定義。この定義には、Web サービスを呼び出す URL などが含まれます。

サービス、スキーマ、およびメッセージはすべて XML ネームスペースに関連付けられます。これらをすべて 1 つのネームスペースに置くことも、複数のネームスペースに置くこともできます。SOAP に対する Caché サポートでは、想定可能なすべての機能がサポートされるわけではありません。このドキュメントで前述の “Caché でサポートされる規格” を参照してください。

サンプルの Web サービス

この付録では、次のサンプル Web サービスの WSDL を抜粋して示します。

Class WSDLSamples.BasicWS Extends %SOAP.WebService
{

Parameter SERVICENAME = "MyServiceName";

Parameter NAMESPACE = "http://www.mynamespace.org";

Parameter USECLASSNAMESPACES = 1;

///  adds two complex numbers
Method Add(a As ComplexNumber, b As ComplexNumber) As ComplexNumber [ WebMethod ]
{
    Set sum = ##class(ComplexNumber).%New()
    Set sum.Real = a.Real + b.Real
    Set sum.Imaginary = a.Imaginary + b.Imaginary

    Quit sum
}
}

この Web サービスは次のクラスに基づいています。

///  A complex number
Class WSDLSamples.ComplexNumber Extends (%RegisteredObject, %XML.Adaptor)
{

/// real part of the complex number
Property Real As %Float;

/// imaginary part of the complex number
Property Imaginary As %Float;

}

特に明記のない限り、この付録では、この Web サービスの WSDL を抜粋して取り上げています (この Web サービスのバリエーションを使用している場合もあります)。

ネームスペース宣言

WSDL の残りの部分を詳細に検証する前に、残りの部分によって使用されるネームスペース宣言を確認すると役に立ちます。<definitions> 要素には、WSDL で使用するネームスペースごとにネームスペース宣言が 1 つ記述されています。この付録の最初に示したサンプルの Web サービスの場合、ネームスペース宣言は次のようになります。

<definitions xmlns="http://schemas.xmlsoap.org/wsdl/" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" 
xmlns:s="http://www.w3.org/2001/XMLSchema" 
xmlns:s0="http://www.mynamespace.org" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
targetNamespace="http://www.mynamespace.org">

以下のパラメータはネームスペース宣言に影響します。

  • Web サービスの NAMESPACE パラメータ。

    このパラメータは、Web サービスのターゲット・ネームスペースを示す targetNamespace 属性で使用します。

    NAMESPACE パラメータを指定していない場合、targetNamespace"http://tempuri.org" になります。

  • Web サービスの SOAPVERSION パラメータ。

    これは自動的に追加される SOAP ネームスペースに影響します。

    既定では、SOAPVERSION は 1.1 です。

    SOAPVERSION が 1.2 の場合、WSDL には次の内容が記述されます。

    <definitions ...
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    ...
    

    SOAPVERSION"" の場合、WSDL には次の内容が記述されます。

    <definitions 
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
    xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" 
    ...
    
  • Web サービスのその他のネームスペース・キーワードとパラメータ、および Web サービスで使用するあらゆる XML 対応クラスのネームスペース・キーワードとパラメータ

    これらの項目については以降のセクションで説明しています。

    これらのネームスペースは、WSDL の残りの部分との整合性を維持するために、必要に応じて宣言します。

また、その他のネームスペース (http://schemas.xmlsoap.org/wsdl/soap/ など) が、必要に応じて自動的に追加されます。

ネームスペースの接頭語は自動的に選択され、カスタマイズはできません。

<service>

WSDL を検証する際、最後から開始して最初まで確認していくことは有用です。

WSDL 内の最後の要素は <service> 要素であり、これは Web サービスを定義するものです。この付録の最初に示したサンプルの Web サービスの場合、この要素は次のようになります。

<service name="MyServiceName">
    <port name="MyServiceNameSoap" binding="s0:MyServiceNameSoap">
        <soap:address location="http://localhost:57772/csp/gsop/WSDLSamples.BasicWS.cls"/>
    </port>
</service>

この要素は、次のように指定されます。

  • Web サービスの SERVICENAME パラメータは、<service> 要素の name 属性として使用されます。“Web サービスのサービス名とネームスペースの指定” を参照してください。

    このパラメータは <port> 要素の name 属性と binding 属性にも影響します。単独で制御することはできません。

  • binding 属性は、ネームスペース宣言でリストされている s0 ネームスペース内のバインディングを参照します。このネームスペースは、Web サービスの NAMESPACE パラメータによって指定されます。

  • Web サービス・クラスの URL によって、<soap:address> 要素の location 属性が制御されます。

<binding>

WSDL では、<service> 要素の前に、<binding> 要素が含まれます。これらはそれぞれ、特定の <portType> 要素によって定義された処理とメッセージの、メッセージ形式とプロトコルの詳細を定義します。

一般に、WSDL には複数の <binding> 要素を含めることができますが、Caché Web サービスの WSDL で含めることができるのは 1 つだけです。

この付録の最初に示したサンプルの Web サービスの場合、この要素は次のようになります。

<binding name="MyServiceNameSoap" type="s0:MyServiceNameSoap">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" 
                  style="document"/>
    <operation name="Add">
        <soap:operation soapAction="http://www.mynamespace.org/WSDLSamples.BasicWS.Add" 
                        style="document"/>
        <input>
            <soap:body use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
        </output>
    </operation>
</binding>

この要素は、次のように指定されます。

  • <binding> 要素の name 属性は、自動的に <service> 要素と一致するようになります (変更しても意味がありません)。

    <binding name="MyServiceNameSoap"  ...
    
  • <binding> 要素の type 属性は、ネームスペース宣言でリストされている s0 ネームスペース内の <portType> 要素を参照します。このネームスペースは、Web サービスの NAMESPACE パラメータによって指定されます。

  • <operation> 要素の name 属性は、Web メソッドの名前に基づきます (変更しても意味がありません)。

    <operation name="Add"> ...
    
  • Web メソッドに SoapAction キーワードを指定した場合、その値は、処理の soapAction 属性に使用されます。以下はその例です。

    ...
    <operation name="Add">
        <soap:operation soapAction="mysoapaction" style="document"/>
    ...
    
    
  • メソッドの返りタイプを %SOAP.OneWayOpens in a new tab として定義すると、この要素に影響します。これについては、この付録で後述の “単方向 Web メソッドの WSDL の相違点” で説明します。

  • Web サービスで SOAPBINARY パラメータに 1 を指定すると、この要素に影響します。これについては、この付録で後述の “Caché バイナリ SOAP 形式の WSDL の相違点” に説明があります。

  • Web サービスで SOAPSESSION パラメータに 1 を指定すると、この要素に影響します。これについては、この付録で後述の “Caché SOAP セッションの WSDL の相違点” に説明があります。

  • SoapBindingStyle クラス・キーワード、SoapBindingStyle メソッド・キーワード、および SoapBindingStyle クエリ・キーワードは、<binding> 要素に影響します。これについては、"Caché クラス定義リファレンス" に説明があります。これらのキーワードでは、document および rpc の値を指定できます。

  • SoapBodyUse クラス・キーワード、SoapBodyUse メソッド・キーワード、および SoapBodyUse クエリ・キーワードは、<binding> 要素に影響します。これについては、"Caché クラス定義リファレンス" に説明があります。これらのキーワードでは、literal および encoded の値を指定できます。

Note:

Web サービスにコンパイル済みのポリシー構成クラスがある場合、<binding> セクションには、<wsp:Policy> 形式の要素も含まれます。このドキュメントでは、ポリシーがどのように WSDL に影響するかについては触れません。それは WS-SecurityPolicy などの仕様によって決まるからです。

ポリシー構成については、"Caché Web サービスの保護" を参照してください。

<portType>

WSDL では、<binding> セクションの前に、<portType> 要素が含まれます。これらの要素はそれぞれ、<binding> 要素に対して単一のアドレスを指定することで個々のエンドポイントを定義します。<portType> 要素は、抽象操作の名前付きセットおよび関連する抽象メッセージです。

一般に、WSDL には複数の <portType> 要素を含めることができますが、Caché Web サービスの WSDL で含めることができるのは 1 つだけです。

この付録の最初に示したサンプルの Web サービスの場合、<portType> 要素は次のようになります。

<portType name="MyServiceNameSoap">
    <operation name="Add">
        <input message="s0:AddSoapIn"/>
        <output message="s0:AddSoapOut"/>
    </operation>
</portType>

この要素のすべての特性は、WSDL の他の部分でも自動的に一貫性が保たれます。独立した制御は必要ありません。

<message>

<portType> 要素の前の <message> 要素は、処理で使用されるメッセージを定義します。WSDL は通常、Web メソッドごとに 2 つの <message> 要素を含んでいます。この付録の最初に示したサンプルの Web サービスの場合、これらの要素は次のようになります。

<message name="AddSoapIn">
    <part name="parameters" element="s0:Add"/>
</message>
<message name="AddSoapOut">
    <part name="parameters" element="s0:AddResponse"/>
</message>

この要素は、次のように指定されます。

  • <message> 要素の name 属性は Web メソッド名に基づきます。

  • メソッドのバインディング・スタイルは、前述のとおり、<binding> 要素によって決まります。これにより、メッセージが複数のパートを持てるかどうかが決まります。

    • バインディング・スタイルが "document" の場合、既定では各メッセージはパートを 1 つのみ持ちます。以下はその例です。

      <message name="AddSoapIn">
          <part name="parameters" .../>
      </message>
      

      ARGUMENTSTYLE パラメータが "message" の場合、メッセージは複数のパートを持つことができます。以下はその例です。

      <message name="AddSoapIn">
         <part name="a" .../>
         <part name="b" .../>
      </message>
      
      
    • バインディング・スタイルが "rpc" の場合、メッセージは複数のパートを持つことができます。以下はその例です。

      <message name="AddSoapIn">
          <part name="a" .../>
          <part name="b" .../>
      </message>
      
  • <soap:body> 要素の use 属性は、前述の <binding> 要素で指定されたとおり、<part> 要素のメッセージの内容を決定します。

    • use 属性が "literal" の場合、<part> 要素には、element 属性が含まれます。以下はその例です。

      <part name="parameters" element="s0:Add"/>
      

      別の例を示します。

      <part name="b" element="s0:b"/>
      
    • use 属性が "encoded" の場合、<part> 要素には、element 属性ではなく type 属性が含まれます。以下はその例です。

      <part name="a" type="s0:ComplexNumber"/>
      
  • メッセージが参照する要素またはタイプの名前は、この付録の次のセクションで説明しているように決定されます。

  • それらの要素およびタイプが属するネームスペースは、この付録の次のセクションで説明しているように決定されます。

  • この付録で後述の “単方向 Web メソッドの WSDL の相違点” も参照してください。

  • Web サービスで SOAPSESSION パラメータに 1 を指定すると、この要素に影響します。これについては、この付録で後述の “Caché SOAP セッションの WSDL の相違点” に説明があります。

<types>

WSDL では、<message> 要素の前に、<types> 要素が含まれます。これは、メッセージが使用するスキーマを定義します。<types> 要素には、Web サービスおよびそのクライアントで使用する要素、タイプ、またはその両方を定義する <schema> 要素が 1 つ以上記述されています。この付録の最初に示したサンプルの Web サービスの場合、この要素は次のようになります。

<types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.mynamespace.org">
        <s:element name="Add">
            <s:complexType>
                <s:sequence>
                    <s:element minOccurs="0" name="a" type="s0:ComplexNumber"/>
                    <s:element minOccurs="0" name="b" type="s0:ComplexNumber"/>
                </s:sequence>
            </s:complexType>
        </s:element>
        <s:complexType name="ComplexNumber">
            <s:sequence>
                <s:element minOccurs="0" name="Real" type="s:double"/>
                <s:element minOccurs="0" name="Imaginary" type="s:double"/>
            </s:sequence>
        </s:complexType>
        <s:element name="AddResponse">
            <s:complexType>
                <s:sequence>
                    <s:element name="AddResult" type="s0:ComplexNumber"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
</types>

以降のサブセクションでは、主なバリエーションについて説明します。

Note:

<types> セクションも、Web サービスで使用するあらゆる XML 対応クラスに定義した XML プロジェクションの影響を受けます。XML プロジェクションによって、ネームスペースの使用、NULL 処理、特殊文字の処理などの課題が決まります。"オブジェクトの XML への投影" のドキュメントを参照してください。

SoapBindingStyle キーワードおよび SoapBodyUse キーワードは、WSDL の他のパートに影響し、それらのパートは <types> セクションの構造を決定します。

name 属性

<schema> 要素は、メッセージ・スタイルに応じて、要素、タイプ、またはその両方で構成できます。要素またはタイプはそれぞれ、次のように指定する name 属性を持ちます。

  • Web メソッドに対応している項目の場合、その項目の name 属性はその Web メソッドの名前 (Add など) と一致します。この属性は変更できません。

  • 引数または返り値として使用する XML 対応クラスに対応している項目の場合、その項目の name 属性はそのクラスの XML プロジェクションで決まります。詳細は、"オブジェクトの XML への投影" のドキュメントを参照してください。

  • 応答メッセージに対応している項目の場合、その項目の name 属性の形式は、既定では method_nameResponse (AddResponse など) になります。

    ドキュメント・スタイルのバインディングを使用する Web メソッドの場合、その Web メソッドの SoapMessageName キーワードを指定することで、これをオーバーライドできます。

  • <schema> の下位レベル項目については、name 属性は自動的に設定され、独立して制御することはできません。

例えば、サンプルの Web メソッドを次のように編集したとします。

Method Add(a As ComplexNumber, b As ComplexNumber) 
As ComplexNumber [ WebMethod, SoapMessageName = MyResponseMessage]
{
    Set sum = ##class(ComplexNumber).%New()
    Set sum.Real = a.Real + b.Real
    Set sum.Imaginary = a.Imaginary + b.Imaginary

    Quit sum
}

この場合、<types> セクションは次のようになります。

<types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.mynamespace.org">
        <s:element name="Add">
            <s:complexType>
                <s:sequence>
                    <s:element minOccurs="0" name="a" type="s0:ComplexNumber"/>
                    <s:element minOccurs="0" name="b" type="s0:ComplexNumber"/>
                </s:sequence>
            </s:complexType>
        </s:element>
        <s:complexType name="ComplexNumber">
            <s:sequence>
                <s:element minOccurs="0" name="Real" type="s:double"/>
                <s:element minOccurs="0" name="Imaginary" type="s:double"/>
            </s:sequence>
        </s:complexType>
        <s:element name="MyResponseMessage">
            <s:complexType>
                <s:sequence>
                    <s:element name="AddResult" type="s0:ComplexNumber"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
</types>

詳細は、“SOAP 応答のメッセージ名の制御” を参照してください。また、"オブジェクトの XML への投影" のドキュメントも参照してください。

<types> のネームスペース

Web サービスの次のパラメータは、<types> セクションでのネームスペースの使用に影響します。

  • TYPENAMESPACE を指定している場合、このパラメータによって <schema> 要素の targetNamespace 属性が制御されます。

  • TYPENAMESPACE を指定していない場合、targetNamespace 属性は NAMESPACE パラメータで指定されます。

  • RESPONSETYPENAMESPACE は、使用する応答のタイプの targetNamespace 属性を制御します。

  • USECLASSNAMESPACES は、サポートするタイプ・クラスで指定されたネームスペースも <types> で使用するかどうかを制御します。

各 XML 対応クラスの NAMESPACE パラメータも、WSDL の <types> 要素に影響します。

前出の Web サービスの次のバリエーションを取り上げます。

Class WSDLSamples.Namespaces Extends %SOAP.WebService
{

Parameter SERVICENAME = "MyServiceName";

Parameter NAMESPACE = "http://www.mynamespace.org";

Parameter RESPONSENAMESPACE = "http://www.myresponsenamespace.org";

Parameter TYPENAMESPACE = "http://www.mytypes.org";

Parameter RESPONSETYPENAMESPACE = "http://www.myresponsetypes.org";

Parameter USECLASSNAMESPACES = 1;

///  adds two complex numbers
Method Add(a As ComplexNumberNS, b As ComplexNumberNS) As ComplexNumberNS [ WebMethod ]
{
    Set sum = ##class(ComplexNumberNS).%New()
    Set sum.Real = a.Real + b.Real
    Set sum.Imaginary = a.Imaginary + b.Imaginary

    Quit sum
}

}

クラス WSDLSamples.ComplexNumberNS は次のようになります。

///  A complex number
Class WSDLSamples.ComplexNumberNS Extends (%RegisteredObject, %XML.Adaptor)
{

Parameter NAMESPACE = "http://www.complexnumbers.org";

Property Real As %Float;

Property Imaginary As %Float;

}

この Web サービスの WSDL では、<types> パートは次のようになります。

<types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.mytypes.org">
        <s:import namespace="http://www.complexnumbers.org"/>
        <s:element name="Add">
            <s:complexType>
                <s:sequence>
                    <s:element minOccurs="0" name="a" type="ns2:ComplexNumberNS"/>
                    <s:element minOccurs="0" name="b" type="ns2:ComplexNumberNS"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.complexnumbers.org">
        <s:complexType name="ComplexNumberNS">
            <s:sequence>
                <s:element minOccurs="0" name="Real" type="s:double"/>
                <s:element minOccurs="0" name="Imaginary" type="s:double"/>
            </s:sequence>
        </s:complexType>
    </s:schema>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.myresponsetypes.org">
        <s:import namespace="http://www.complexnumbers.org"/>
        <s:element name="AddResponse">
            <s:complexType>
                <s:sequence>
                    <s:element name="AddResult" type="ns2:ComplexNumberNS"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
</types>

使用可能なその他のバリエーション

以下に示すその他のパラメータも <types> 要素に影響します。

  • Web サービスの INCLUDEDOCUMENTATION パラメータが 1 の場合、タイプ・クラスに追加したコメントを含む <annotation> 要素が <types> セクションに追加されます (このコメントの先頭には 3 つのスラッシュを記述する必要があります)。

    既定では、INCLUDEDOCUMENTATION は 0 です。

    例えば、サンプルの Web サービスを編集して次の記述を追加したとします。

    Parameter INCLUDEDOCUMENTATION = 1;
    

    この場合、<types> セクションは次のようになります。

    ...
    <s:complexType name="ComplexNumber">
        <s:annotation>
            <s:documentation>A complex number</s:documentation>
        </s:annotation>
        <s:sequence>
            <s:element minOccurs="0" name="Real" type="s:double">
                <s:annotation>
                    <s:documentation>real part of the complex number</s:documentation>
                </s:annotation>
            </s:element>
            <s:element minOccurs="0" name="Imaginary" type="s:double">
                <s:annotation>
                    <s:documentation>imaginary part of the complex number</s:documentation>
                </s:annotation>
            </s:element>
        </s:sequence>
    </s:complexType>
    ...
    
  • Web サービスで SOAPBINARY パラメータに 1 を指定すると <types> 要素に影響します。これについては、この付録後半の “Caché バイナリ SOAP 形式の WSDL の相違点” に説明があります。

  • Web サービスで SOAPSESSION パラメータに 1 を指定すると、この要素に影響します。これについては、この付録で後述の “Caché SOAP セッションの WSDL の相違点” に説明があります。

  • SoapTypeNameSpace キーワードを指定すると、WSDL のこのパートに影響します。"Caché クラス定義リファレンス" を参照してください。

  • 引数で REQUIRED パラメータに 1 を指定すると、WSDL に引数の minOccurs=1 が含まれます。このクラスのパラメータについては、“基本要件” を参照してください。

  • メソッドに SoapRequestMessage キーワードが指定されている場合、対応する要素の名前は、そのメソッドの名前ではなく、SoapRequestMessage キーワードの値です。

  • ALLOWREDUNDANTARRAYNAME パラメータの影響については、"オブジェクトの XML への投影" の “XML スキーマへの投影の制御” の章にある “コレクション・プロパティの XML スキーマへの投影” を参照してください。

メソッド・シグニチャのバリエーションによる WSDL のバリエーション

ここでは、メソッド・シグニチャのバリエーションによって生じる WSDL のバリエーションをいくつか示します。

参照による返り値または出力パラメータとしての返り値

参照によって値を返す場合、または出力パラメータとして値を返す場合には、Web メソッドのシグニチャ内で ByRef キーワードまたは Output キーワードを必要に応じて使用します。この変更は、スキーマと SOAP 応答メッセージに影響を及ぼします。

例えば、2 つの異なる Web サービスのメソッドから、次のような Web メソッド・シグニチャがあるとします。

//from web service 1
Method HelloWorld() As %String [ WebMethod ]

//from web service 2
Method HelloWorld(ByRef myarg As %String) [ WebMethod ]

最初の Web サービスでは、<types> セクションは次のようになります。

<types>
    <s:schema elementFormDefault="qualified" targetNamespace="http://www.helloworld.org">
        <s:element name="HelloWorld1">
            <s:complexType>
                <s:sequence/>
            </s:complexType>
        </s:element>
        <s:element name="HelloWorld1Response">
            <s:complexType>
                <s:sequence>
                    <s:element name="HelloWorld1Result" type="s:string"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
</types>

参照によって値を返す 2 つ目の Web サービスでは、<types> セクションに、応答メッセージに対応するタイプのバリエーションがあります。

<types>
...
        <s:element name="HelloWorld2Response">
            <s:complexType>
                <s:sequence>
                    <s:element minOccurs="0" name="myarg" type="s:string"/>
...

これは、<HelloWorld2Response> メッセージに含まれる要素が <myarg> であることを示しています。この要素は、メッセージ・シグニチャの引数の名前に対応します。一方、この要素は通常 <methodnameResult> です。

Output キーワードの代わりに ByRef キーワードを使用しても、WSDL に同じ影響が及ぼされます。

これらのキーワードの詳細は、"Caché オブジェクトの使用法" の “メソッド” の章を参照してください。

Caché Web サービスの WSDL のその他のバリエーション

このセクションでは、Caché Web サービスに使用できる、WSDL のその他のバリエーションについて説明します。

Caché SOAP セッションの WSDL の相違点

Web サービスで SOAPSESSION パラメータに 1 を指定すると、WSDL に次のように影響します。

  • <binding> 要素では、各 <operation> 要素の <input> 要素と <output> 要素に次の追加の下位要素があります。

    <soap:header message="s0:CacheSessionHeader" part="CSPCHD" use="literal"/>
    

    以下はその例です。

    <operation name="Add">
        <soap:operation soapAction="http://www.mynamespace.org/WSDLSamples.BasicWS.Add" style="document"/>
        <input>
            <soap:body use="literal"/>
            <soap:header message="s0:CacheSessionHeader" part="CSPCHD" use="literal"/>
        </input>
        <output>
            <soap:body use="literal"/>
            <soap:header message="s0:CacheSessionHeader" part="CSPCHD" use="literal"/>
        </output>
    </operation>
    
  • WSDL に次の追加の <message> 要素があります。

    <message name="CacheSessionHeader">
        <part name="CSPCHD" element="chead:CSPCHD"/>
    </message>
    
  • <types> 要素に次の追加項目があります。

    <s:schema elementFormDefault="qualified" targetNamespace="http://www.intersystems.com/SOAPheaders">
        <s:element name="CSPCHD">
            <s:complexType>
                <s:sequence>
                    <s:element name="id" type="s:string"/>
                </s:sequence>
            </s:complexType>
        </s:element>
    </s:schema>
    
  • ネームスペース宣言に次の追加項目があります。

    xmlns:chead="http://www.intersystems.com/SOAPheaders"
    

Caché バイナリ SOAP 形式の WSDL の相違点

SOAPBINARY パラメータに 1 を指定した Caché Web サービスでは、WSDL の機能が次のように拡張されます。

  • <binding> 要素に、SOAP バイナリ・サポートを示す拡張の子要素があります。

    <isc:binding charset="Cache_charset"> 
    

    Cache_charset は、Web サービスの Caché ネームスペースの Caché 文字セット (Unicode、Latin1 など) です。

    以下はその例です。

    <isc:binding charset="Unicode"> 
    
  • WSDL の <types> セクションでは、各 <complexType> 要素に次の拡張属性があります。

    <complexType isc:classname="service_name:class_name" ...>
    

    service_name は Web サービス名、class_name はこの複素数型に対応する Caché クラス名です。以下はその例です。

    <s:complexType isc:classname="AddComplex:GSOAP.ComplexNumber" name="ComplexNumber">
      <s:sequence>
        <s:element minOccurs="0" name="Real" type="s:double"/>
        <s:element minOccurs="0" name="Imaginary" type="s:double"/>
      </s:sequence>
    </s:complexType>
    
    
  • また、<types> セクションでは、<element> 要素と <simpleContent> 要素にも、必要に応じて次の形式の拡張属性があります。

    <element isc:property="property_name" ....>  
    <simpleContent isc:property="property_name" ....>
    

    ここで、property_name は、その要素にマップする Caché プロパティの名前です (WSDL では、XMLPROJECTION"content" に設定したプロパティには、<simpleContent> 要素が使用されます)。

    以下はその例です。

    <s:element minOccurs="0" name="RealType" isc:property="Real" type="s:double"/>
    
    

    この属性は、プロパティ名と異なる XML 名を使用できるようにする XMLNAME プロパティ・パラメータをプロパティで使用している場合にのみ設定されます。上の例は、次のプロパティを持つクラスを使用する Web サービスの WSDL から抽出したものです。

    Property Real As %Float (XMLNAME = "RealType");
    
    

    isc:property 属性を使用すると、生成されたクライアント・クラスのプロパティ名を、サービス・クラスのプロパティ名と同じに指定できます。現在、ユーザが選択した内容または substitutionGroup を使用する場合、また、タイプ・クラスに XMLNAME パラメータがあるラップ要素の場合は例外です。

  • ネームスペース宣言に次の追加項目があります。

    xmlns:isc="http://www.intersystems.com/soap/"
    

これらの WSDL の拡張機能は、XML スキーマ、WSDL、および WS-I Basic Profile の各仕様の下で有効であり、これらの仕様に準拠したすべての Web クライアント・ツールキットでは無視されることが想定されています。

Note:

Caché の Web サービスまたは Web クライアントが Caché のバイナリ SOAP 形式を使用する場合、その Web サービスまたは Web クライアントで WS-Security 機能または WS-Policy 機能を使用することはできません。"Caché Web サービスの保護" を参照してください。

単方向 Web メソッドの WSDL の相違点

メソッドの返りタイプを %SOAP.OneWayOpens in a new tab として定義している場合、WSDL は既定のものと以下の点が異なります。

  • <binding> 要素では、メソッドの <operation> 要素に <output> 要素がありません。

  • <portType> 要素では、メソッドの <operation> 要素に <output> 要素がありません。

  • 応答メッセージには <message> 要素がありません。

FeedbackOpens in a new tab