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?

生成されたクラスの詳細

この付録では、参考情報として、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,"http://tempuri.org/Demo.MyService.DemoMethod")
    }

    Web サービスの場合、このメソッドは以下の例のようになります。

    Method DemoMethod() As %String [ Final,  
    SoapAction = "http://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 との連携に必要なエンコードおよびメッセージ・スタイルを制御する以下のキーワードを指定します。

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

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

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

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

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

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

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

タイプのネームスペース

SOAP ウィザードでは、次に示すように、メッセージ・タイプがネームスペースに自動的に割り当てられます。

Web クライアントおよび Web サービスで使用されるタイプのネームスペース
アイテム 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 = "http://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 = "http://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 メソッドに関するその他の注意事項を示します。

  • Caché は、各メソッド名が、メソッド名の制限より短く、かつ固有であることを確認します (メソッド名の長さの詳細は、"Caché プログラミング入門ガイド" の “一般的なシステム制限” を参照してください)。つまり、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