生成された WSDL の詳細
このトピックでは、参考として、InterSystems IRIS® データ・プラットフォーム Web サービスのサンプル WSDL ドキュメントから一部をいくつか取り上げ、キーワードとパラメータがそれらの部分に及ぼす影響に関する情報を示します。
Web メソッドのシグニチャも WSDL に影響しますが、このトピックではその詳細には触れません。
WSDL は、Web サービスで使用するあらゆる XML 対応クラスの XML プロジェクションの影響も受けます。"オブジェクトの XML への投影" を参照してください。
Web サービスにコンパイル済みのポリシー構成クラスがある場合、<binding> セクションには、<wsp:Policy> 形式の要素も含まれます。このドキュメントでは、ポリシーがどのように WSDL に影響するかについては触れません。それは WS-SecurityPolicy などの仕様によって決まるからです。
ポリシー構成については、"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> 要素を含めることができますが、InterSystems IRIS Web サービスの WSDL に含まれるのは 1 つだけです。
-
Web サービスの bindings 要素。これは、特定のポート・タイプによって定義された処理とメッセージの、メッセージ形式とプロトコルの詳細を定義します。
一般に、WSDL には複数の <binding> 要素を含めることができますが、InterSystems IRIS Web サービスの WSDL に含まれるのは 1 つだけです。
-
前述のコンポーネントに関する、Web サービスの正式な定義。この定義には、Web サービスを呼び出す URL などが含まれます。
サービス、スキーマ、およびメッセージはすべて XML ネームスペースに関連付けられます。これらをすべて 1 つのネームスペースに置くことも、複数のネームスペースに置くこともできます。SOAP に対する InterSystems IRIS サポートでは、想定可能なすべてのバリエーションがサポートされるわけではありません。"SOAP 標準" を参照してください。
サンプルの Web サービス
このトピックでは、次のサンプル Web サービスの WSDL を抜粋して示します。
Class WSDLSamples.BasicWS Extends %SOAP.WebService
{
Parameter SERVICENAME = "MyServiceName";
Parameter NAMESPACE = "https://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 %Double;
/// imaginary part of the complex number
Property Imaginary As %Double;
}
特に明記のない限り、このトピックでは、この Web サービスの WSDL を抜粋して取り上げています (この Web サービスのバリエーションを使用している場合もあります)。
ネームスペース宣言
WSDL の残りの部分を詳細に検証する前に、残りの部分によって使用されるネームスペース宣言を確認すると役に立ちます。<definitions> 要素には、WSDL で使用するネームスペースごとにネームスペース宣言が 1 つ記述されています。このトピックの最初に示したサンプルの Web サービスの場合、ネームスペース宣言は次のようになります。
<definitions xmlns="https://schemas.xmlsoap.org/wsdl/"
xmlns:SOAP-ENC="https://schemas.xmlsoap.org/soap/encoding/"
xmlns:mime="https://schemas.xmlsoap.org/wsdl/mime/"
xmlns:s="https://www.w3.org/2001/XMLSchema"
xmlns:s0="https://www.mynamespace.org"
xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="https://schemas.xmlsoap.org/wsdl/"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
targetNamespace="https://www.mynamespace.org">
以下のパラメータはネームスペース宣言に影響します。
-
Web サービスの NAMESPACE パラメータ。
このパラメータは、Web サービスのターゲット・ネームスペースを示す targetNamespace 属性で使用します。
NAMESPACE パラメータを指定していない場合、targetNamespace は "https://tempuri.org" になります。
-
Web サービスの SOAPVERSION パラメータ。
これは自動的に追加される SOAP ネームスペースに影響します。
既定では、SOAPVERSION は 1.1 です。
SOAPVERSION が 1.2 の場合、WSDL には次の内容が記述されます。
<definitions ... xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/" ...
SOAPVERSION が "" の場合、WSDL には次の内容が記述されます。
<definitions xmlns:soap="https://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="https://schemas.xmlsoap.org/wsdl/soap12/" ...
-
Web サービスのその他のネームスペース・キーワードとパラメータ、および Web サービスで使用するあらゆる XML 対応クラスのネームスペース・キーワードとパラメータ
これらの項目については以降のセクションで説明しています。
これらのネームスペースは、WSDL の残りの部分との整合性を維持するために、必要に応じて宣言します。
また、その他のネームスペース (https://schemas.xmlsoap.org/wsdl/soap/ など) が、必要に応じて自動的に追加されます。
ネームスペースの接頭語は自動的に選択され、カスタマイズはできません。
<service>
WSDL を検証する際、最後から開始して最初まで確認していくことは有用です。
WSDL 内の最後の要素は <service> 要素であり、これは Web サービスを定義するものです。このトピックの最初に示したサンプルの Web サービスの場合、この要素は次のようになります。
<service name="MyServiceName">
<port name="MyServiceNameSoap" binding="s0:MyServiceNameSoap">
<soap:address location="https://localhost/csp/mysamples/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> 要素を含めることができますが、InterSystems IRIS Web サービスの WSDL に含まれるのは 1 つだけです。
このトピックの最初に示したサンプルの Web サービスの場合、この要素は次のようになります。
<binding name="MyServiceNameSoap" type="s0:MyServiceNameSoap">
<soap:binding transport="https://schemas.xmlsoap.org/soap/http"
style="document"/>
<operation name="Add">
<soap:operation soapAction="https://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 を指定すると、この要素に影響します。"InterSystems IRIS バイナリ SOAP 形式の WSDL の相違点" を参照してください。
-
Web サービスで SOAPSESSION パラメータに 1 を指定すると、この要素に影響します。"InterSystems IRIS SOAP セッションの WSDL の相違点" を参照してください。
SoapBindingStyle クラス・キーワード、SoapBindingStyle メソッド・キーワード、および SoapBindingStyle クエリ・キーワードは、<binding> 要素に影響します。これについては、"クラス定義リファレンス" に説明があります。これらのキーワードでは、document および rpc の値を指定できます。
-
SoapBodyUse クラス・キーワード、SoapBodyUse メソッド・キーワード、および SoapBodyUse クエリ・キーワードは、<binding> 要素に影響します。これについては、"クラス定義リファレンス" に説明があります。これらのキーワードでは、literal および encoded の値を指定できます。
Web サービスにコンパイル済みのポリシー構成クラスがある場合、<binding> セクションには、<wsp:Policy> 形式の要素も含まれます。このドキュメントでは、ポリシーがどのように WSDL に影響するかについては触れません。それは WS-SecurityPolicy などの仕様によって決まるからです。
ポリシー構成については、"Web サービスの保護" を参照してください。
<portType>
WSDL では、<binding> セクションの前に、<portType> 要素が含まれます。これらの要素はそれぞれ、<binding> 要素に対して単一のアドレスを指定することで個々のエンドポイントを定義します。<portType> 要素は、抽象操作の名前付きセットおよび関連する抽象メッセージです。
一般に、WSDL には複数の <portType> 要素を含めることができますが、InterSystems IRIS 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 を指定すると、この要素に影響します。"InterSystems IRIS SOAP セッションの WSDL の相違点" を参照してください。
<types>
WSDL では、<message> 要素の前に、<types> 要素が含まれます。これは、メッセージが使用するスキーマを定義します。<types> 要素には、Web サービスおよびそのクライアントで使用する要素、タイプ、またはその両方を定義する <schema> 要素が 1 つ以上記述されています。このトピックの最初に示したサンプルの Web サービスの場合、この要素は次のようになります。
<types>
<s:schema elementFormDefault="qualified" targetNamespace="https://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>
以降のサブセクションでは、主なバリエーションについて説明します。
<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="https://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 = "https://www.mynamespace.org";
Parameter RESPONSENAMESPACE = "https://www.myresponsenamespace.org";
Parameter TYPENAMESPACE = "https://www.mytypes.org";
Parameter RESPONSETYPENAMESPACE = "https://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 = "https://www.complexnumbers.org";
Property Real As %Double;
Property Imaginary As %Double;
}
この Web サービスの WSDL では、<types> パートは次のようになります。
<types>
<s:schema elementFormDefault="qualified" targetNamespace="https://www.mytypes.org">
<s:import namespace="https://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="https://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="https://www.myresponsetypes.org">
<s:import namespace="https://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> 要素に影響します。"InterSystems IRIS バイナリ SOAP 形式の WSDL の相違点" を参照してください。
-
Web サービスで SOAPSESSION パラメータに 1 を指定すると、この要素に影響します。"InterSystems IRIS SOAP セッションの WSDL の相違点" を参照してください。
-
SoapTypeNameSpace キーワードを指定すると、WSDL のこのパートに影響します。"クラス定義リファレンス" を参照してください。
-
引数で REQUIRED パラメータに 1 を指定すると、WSDL に引数の minOccurs=1 が含まれます。このクラスのパラメータについては、"基本要件" を参照してください。
-
メソッドに SoapRequestMessage キーワードが指定されている場合、対応する要素の名前は、そのメソッドの名前ではなく、SoapRequestMessage キーワードの値です。
-
ALLOWREDUNDANTARRAYNAME パラメータの影響については、"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="https://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 に同じ影響が及ぼされます。
これらのキーワードの情報については、"メソッド" を参照してください。
InterSystems IRIS Web サービスの WSDL のその他のバリエーション
このセクションでは、InterSystems IRIS Web サービスに使用できる、WSDL のその他のバリエーションについて説明します。
InterSystems IRIS SOAP セッションの WSDL の相違点
Web サービスで SOAPSESSION パラメータに 1 を指定すると、WSDL に次のように影響します。
-
<binding> 要素では、各 <operation> 要素の <input> 要素と <output> 要素に次の追加の下位要素があります。
<soap:header message="s0:IRISSessionHeader" part="CSPCHD" use="literal"/>
以下はその例です。
<operation name="Add"> <soap:operation soapAction="https://www.mynamespace.org/WSDLSamples.BasicWS.Add" style="document"/> <input> <soap:body use="literal"/> <soap:header message="s0:IRISSessionHeader" part="CSPCHD" use="literal"/> </input> <output> <soap:body use="literal"/> <soap:header message="s0:IRISSessionHeader" part="CSPCHD" use="literal"/> </output> </operation>
-
WSDL に次の追加の <message> 要素があります。
<message name="IRISSessionHeader"> <part name="CSPCHD" element="chead:CSPCHD"/> </message>
-
<types> 要素に次の追加項目があります。
<s:schema elementFormDefault="qualified" targetNamespace="https://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="https://www.intersystems.com/SOAPheaders"
InterSystems IRIS バイナリ SOAP 形式の WSDL の相違点
SOAPBINARY パラメータに 1 を指定した InterSystems IRIS Web サービスでは、WSDL の機能が次のように拡張されます。
-
<binding> 要素に、SOAP バイナリ・サポートを示す拡張の子要素があります。
<isc:binding charset="isc_charset">
isc_charset は、Web サービスの InterSystems IRIS ネームスペースの InterSystems IRIS 文字セット (Unicode、Latin1 など) です。
以下はその例です。
<isc:binding charset="Unicode">
-
WSDL の <types> セクションでは、各 <complexType> 要素に次の拡張属性があります。
<complexType isc:classname="service_name:class_name" ...>
service_name は Web サービス名、class_name はこの複雑なタイプに対応する InterSystems IRIS クラス名です。以下はその例です。
<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 は、その要素にマップする InterSystems IRIS プロパティの名前です(WSDL では、XMLPROJECTION を "content" に設定したプロパティには、<simpleContent> 要素が使用されます)。
以下はその例です。
<s:element minOccurs="0" name="RealType" isc:property="Real" type="s:double"/>
この属性は、プロパティ名と異なる XML 名を使用できるようにする XMLNAME プロパティ・パラメータをプロパティで使用している場合にのみ設定されます。上の例は、次のプロパティを持つクラスを使用する Web サービスの WSDL から抽出したものです。
Property Real As %Double (XMLNAME = "RealType");
isc:property 属性を使用すると、生成されたクライアント・クラスのプロパティ名を、サービス・クラスのプロパティ名と同じに指定できます。現在、ユーザが選択した内容または substitutionGroup を使用する場合、また、タイプ・クラスに XMLNAME パラメータがあるラップ要素の場合は例外です。
-
ネームスペース宣言に次の追加項目があります。
xmlns:isc="https://www.intersystems.com/soap/"
これらの WSDL の拡張機能は、XML スキーマ、WSDL、および WS-I Basic Profile の各仕様の下で有効であり、これらの仕様に準拠したすべての Web クライアント・ツールキットでは無視されることが想定されています。
InterSystems IRIS Web サービスまたは Web クライアントが InterSystems IRIS バイナリ SOAP 形式を使用する場合、その Web サービスまたは Web クライアントで WS-Security 機能または WS-Policy 機能を使用することはできません。"Web サービスの保護" を参照してください。
単方向 Web メソッドの WSDL の相違点
メソッドの返りタイプを %SOAP.OneWayOpens in a new tab として定義している場合、WSDL は既定のものと以下の点が異なります。
-
<binding> 要素では、メソッドの <operation> 要素に <output> 要素がありません。
-
<portType> 要素では、メソッドの <operation> 要素に <output> 要素がありません。
-
応答メッセージには <message> 要素がありません。