Skip to main content

生成された Web サービス・クラスと Web クライアント・クラスの詳細

ここでは、参考情報として、%SOAP.WSDL.ReaderOpens in a new tab によって生成されるクラスについて説明します。

生成されるクラスの概要

%SOAP.WSDL.ReaderOpens in a new tab では、以下のようにクラスを生成します。

  • %SOAP.WSDL.ReaderOpens in a new tab の使用方法に応じて、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 メソッドへの入力または出力として使用される複雑なタイプごとに、XML 対応クラスがあります。

  • 上記のタイプのコンポーネントとなる複雑なタイプごとに、XML 対応クラスがあります。

    %SOAP.WSDL.ReaderOpens in a new tab ではこれが再帰的に行われるため、最も複雑でないタイプのプロパティは単純なデータ型プロパティとなり、これは XSD タイプと直接対応します。

これらのクラスでは、エンコードおよびバインディング・スタイルネームスペースの割り当て、およびその他の項目を指定するのに必要な、クラスおよびメソッドのキーワードとパラメータが指定されます。

エンコードおよびバンディング・スタイルを制御するキーワード

生成された Web クライアント・クラスおよび Web サービス・クラスには、指定の WSDL との連携に必要なエンコードおよびメッセージ・スタイルを制御する以下のキーワードの設定が含まれます。

Web クライアントまたは Web サービスが WSDL に従わなくなるため、これらのキーワードは変更しないでください。詳細は、"クラス定義リファレンス" を参照してください。

ネームスペースの割り当てを制御するパラメータとキーワード

生成されたクラスには、ネームスペース割り当てを制御するためのパラメータとキーワードが含まれます。以下のサブセクションでは、メッセージのネームスペースとタイプのネームスペースについて説明します。

Web クライアントまたは Web サービスが WSDL に従わなくなるため、これらの値は変更しないでください。SoapNameSpace および SoapTypeNameSpace の詳細は、"クラス定義リファレンス" を参照してください。

メッセージのネームスペース

次の値は、SOAP メッセージで使用されるネームスペースを制御します。

Web クライアントまたは Web サービスによって送信される SOAP メッセージのネームスペース
アイテム %SOAP.WSDL.ReaderOpens in a new tab で指定される値
NAMESPACE (クラス・パラメータ) すべての要求メッセージで同一のネームスペースが使用される場合の要求メッセージのネームスペース。
SoapNameSpace (メソッド・キーワード) 各要求メッセージで異なるネームスペースが使用される場合の各要求メッセージのネームスペース。
RESPONSENAMESPACE (クラス・パラメータ) 応答メッセージのネームスペース。これを指定しないと、応答メッセージは NAMESPACE パラメータで指定されるネームスペースに配置されます。SoapNameSpace キーワードは、応答メッセージのネームスペースに影響を及ぼすことはありません。

タイプのネームスペース

メッセージ・タイプは以下のようにネームスペースに割り当てられます。

Web クライアントおよび Web サービスで使用されるタイプのネームスペース
アイテム %SOAP.WSDL.ReaderOpens in a new tab で指定される値
TYPENAMESPACE (クラス・パラメータ) すべてのメソッドが同一のネームスペースのタイプを参照する場合に、%SOAP.WSDL.ReaderOpens in a new tab はこのパラメータを設定します。
RESPONSETYPENAMESPACE (クラス・パラメータ) WSDL がドキュメントスタイルのバインディングを使用し、応答メッセージが要求メッセージとは異なるネームスペースのタイプを使用する場合に、%SOAP.WSDL.ReaderOpens in a new tab はこのパラメータを設定します。このパラメータは、クラスのすべてのメソッドに適用されます。応答タイプはすべて、相互に同一のネームスペースに属すると見なされます。
SoapTypeNameSpace (メソッド・キーワード) <s:schema> 要素の targetNamespace 属性の値。各メソッドが異なるネームスペースのタイプを使用している場合に、%SOAP.WSDL.ReaderOpens in a new tab はメソッドごとにこのキーワードを設定します。

このキーワードは、RESPONSETYPENAMESPACE パラメータをオーバーライドしません。

配列プロパティの作成

既定では、特定のシナリオで、%SOAP.WSDL.ReaderOpens in a new tab によって配列型プロパティが作成されます。NoArrayProperties オプションを使用すると、別の構造を持つプロパティを必要に応じて作成できます。

具体的には、以下のタイプを含む 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.WSDL.ReaderOpens in a new tab は以下のクラスを生成します。

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");

}

クラスの生成時に NoArrayProperties を 1 に指定すると、生成された Obj クラス内の MyProp プロパティが代わりに以下のように定義されます。

Property MyProp As list Of testws.Item(XMLITEMNAME = "Item", XMLNAME = "MyProp", XMLPROJECTION = "COLLECTION");

このプロパティは、%SOAP.WSDL.ReaderOpens in a new tab によって同様に生成された以下のクラスを参照します。

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 属性を、"" ではなく、"""" となるように編集します。

FeedbackOpens in a new tab