生成されたクラスの詳細
このトピックでは、参考情報として、SOAP ウィザードによって生成されるクラスについて説明します。
生成されるクラスの概要
SOAP ウィザードでは、以下のようなクラスが生成されます。
-
SOAP ウィザードでのユーザの選択に応じて、Web クライアント・クラス、Web サービス・クラス、またはその両方が生成されます。Web クライアント・クラスが作成された場合、それは %SOAP.WebClientOpens in a new tab を拡張したものです。Web サービス・クラスが作成された場合、それは %SOAP.WebServiceOpens in a new tab を拡張したものです。
これらのクラスにはそれぞれ、WSDL で定義された Web メソッドごとに 1 つの Wb メソッドがあります。Web クライアントの場合、このメソッドは以下の例のようになります。
Method DemoMethod() As %String [ Final, SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ] { Quit ..WebMethod("DemoMethod").Invoke($this,"https://tempuri.org/Demo.MyService.DemoMethod") }
Web サービスの場合、このメソッドは以下の例のようになります。
Method DemoMethod() As %String [ Final, SoapAction = "https://tempuri.org/Demo.MyService.DemoMethod", SoapBindingStyle = document, SoapBodyUse = literal, WebMethod ] { // Web Service Method Implementation Goes Here. }
-
Web メソッドへの入力または出力として使用される複雑なタイプごとに、SOAP ウィザードによって XML 対応クラスが生成されます。
-
上記のタイプのコンポーネントとなる複雑なタイプごとに、SOAP ウィザードによって XML 対応クラスが生成されます。
SOAP ウィザードではこれが再帰的に行われるため、最も複雑でないタイプのプロパティは単純なデータ型プロパティとなり、これは XSD タイプと直接対応します。
SOAP ウィザードでは、これらのクラスに、エンコードおよびバインディング・スタイル、ネームスペースの割り当て、およびその他の項目を指定するのに必要な、クラスおよびメソッドのキーワードとパラメータを指定します。
エンコードおよびバンディング・スタイルを制御するキーワード
SOAP ウィザードでは、生成された Web クライアント・クラスおよび Web サービス・クラスに、指定の WSDL との連携に必要なエンコードおよびメッセージ・スタイルを制御する以下のキーワードを指定します。
-
SoapBodyUse クラス・キーワード
-
SoapBodyUse メソッド・キーワード
-
SoapBindingStyle クラス・キーワード
-
SoapBindingStyle メソッド・キーワード
Web クライアントまたは Web サービスが WSDL に従わなくなるため、これらのキーワードは変更しないでください。詳細は、"クラス定義リファレンス" を参照してください。
ネームスペースの割り当てを制御するパラメータとキーワード
SOAP ウィザードは、生成されたクラスに、ネームスペース割り当てを制御するためのパラメータとキーワードを使用します。以下のサブセクションでは、メッセージのネームスペースとタイプのネームスペースについて説明します。
Web クライアントまたは Web サービスが WSDL に従わなくなるため、これらの値は変更しないでください。SoapNameSpace および SoapTypeNameSpace の詳細は、"クラス定義リファレンス" を参照してください。
メッセージのネームスペース
SOAP ウィザードでは、次の値を指定して、SOAP メッセージで使用されるネームスペースを制御します。
アイテム | SOAP ウィザードで指定される値 |
---|---|
NAMESPACE (クラス・パラメータ) | すべての要求メッセージで同一のネームスペースが使用される場合の要求メッセージのネームスペース。 |
SoapNameSpace (メソッド・キーワード) | 各要求メッセージで異なるネームスペースが使用される場合の各要求メッセージのネームスペース。 |
RESPONSENAMESPACE (クラス・パラメータ) | 応答メッセージのネームスペース。これを指定しないと、応答メッセージは NAMESPACE パラメータで指定されるネームスペースに配置されます。SoapNameSpace キーワードは、応答メッセージのネームスペースに影響を及ぼすことはありません。 |
タイプのネームスペース
SOAP ウィザードでは、次に示すように、メッセージ・タイプがネームスペースに自動的に割り当てられます。
アイテム | SOAP ウィザードで指定される値 |
---|---|
TYPENAMESPACE (クラス・パラメータ) | すべてのメソッドが同一のネームスペースのタイプを参照する場合に、SOAP ウィザードによってこのパラメータが設定されます。 |
RESPONSETYPENAMESPACE (クラス・パラメータ) | SOAP ウィザードでは、WSDL がドキュメントスタイルのバインディングを使用し、応答メッセージが要求メッセージとは異なるネームスペースのタイプを使用する場合に、このパラメータが設定されます。このパラメータは、クラスのすべてのメソッドに適用されます。応答タイプはすべて、相互に同一のネームスペースに属すると見なされます。 |
SoapTypeNameSpace (メソッド・キーワード) | <s:schema> 要素の targetNamespace 属性の値。各メソッドが異なるネームスペースのタイプを使用している場合に、SOAP ウィザードによって、メソッドごとにこのキーワードが設定されます。
このキーワードは、RESPONSETYPENAMESPACE パラメータをオーバーライドしません。 |
配列プロパティの作成
既定では、特定のシナリオで、SOAP ウィザードによって配列型プロパティが作成されます。[配列プロパティ以外を作成] オプションを使用すると、別の構造を持つプロパティを必要に応じて作成できます。
具体的には、以下のタイプを含む WSDL を考えてみます。
<s:complexType name="Obj">
<s:sequence>
<s:element minOccurs="0" name="MyProp" type="test:Array"/>
</s:sequence>
</s:complexType>
<s:complexType name="Array">
<s:sequence>
<s:element maxOccurs="unbounded" minOccurs="0" name="Item" nillable="true" type="test:Item"/>
</s:sequence>
</s:complexType>
<s:complexType name="Item">
<s:simpleContent>
<s:extension base="s:string">
<s:attribute name="Key" type="s:string" use="required"/>
</s:extension>
</s:simpleContent>
</s:complexType>
既定では、SOAP ウィザードによって以下のクラスが生成されます。
Class testws.Obj Extends (%RegisteredObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 1;
Parameter NAMESPACE = "https://testws.org";
Parameter XMLNAME = "Obj";
Parameter XMLSEQUENCE = 1;
Property MyProp As array Of %String(MAXLEN = "", XMLITEMNAME = "Item",
XMLKEYNAME = "Key", XMLNAME = "MyProp", XMLPROJECTION = "COLLECTION");
}
SOAP ウィザードを使用する際に [配列プロパティ以外を作成] を選択すると、生成された Obj クラス内の MyProp プロパティが代わりに以下のように定義されます。
Property MyProp As list Of testws.Item(XMLITEMNAME = "Item", XMLNAME = "MyProp", XMLPROJECTION = "COLLECTION");
このプロパティは、SOAP ウィザードによって同様に生成された以下のクラスを参照します。
Class testws.Item Extends (%SerialObject, %XML.Adaptor)
{
Parameter ELEMENTQUALIFIED = 1;
Parameter NAMESPACE = "https://testws.org";
Parameter XMLNAME = "Item";
Parameter XMLSEQUENCE = 1;
Property content As %String(MAXLEN = "", XMLNAME = "content", XMLPROJECTION = "CONTENT");
Property Key As %String(MAXLEN = "", XMLNAME = "Key", XMLPROJECTION = "ATTRIBUTE")
[ Required, SqlFieldName = _Key ];
}
生成されたクラスの Web メソッドに関するその他の注意事項
このセクションでは、生成される Web クライアント・クラスの Web メソッドに関するその他の注意事項を示します。
-
InterSystems IRIS® データ・プラットフォームは、各メソッド名がメソッド名の制限より短く、かつ一意であることを確認します (メソッド名の長さについては、"一般的なシステム制限" を参照してください)。WSDL でのメソッド名がこの制限より長い場合、生成される Web メソッドの名前は、WSDL での名前と同じになりません。
使用されるアルゴリズムは文書化されておらず、予告なしに変更される場合があります。
-
有効な WSDL の指定のメソッドで soapAction 属性が "" である場合、生成されるクライアント・クラスに次のいずれかの変更を加えて、このメソッドが機能するようにする必要があります。
-
SOAPACTIONQUOTED パラメータを 1 に設定します。
-
生成されるクライアント・クラスで Web メソッドを編集します。このメソッドは、元は次のような内容です。
Quit ..WebMethod("HelloWorld").Invoke($this,"")
これを次のように編集します。
Quit ..WebMethod("HelloWorld").Invoke($this,"""")
または、Web クライアントを生成する前に WSDL を編集します。この場合、soapAction 属性を、"" ではなく、"""" となるように編集します。
-