Skip to main content

This documentation is for an older version of this product. See the latest version of this content.Opens in a new tab

Web クライアントの作成

Web クライアントは、Web サービスにアクセスするソフトウェアです。Web クライアントには、一連のプロキシ・メソッドが用意されています。各プロキシ・メソッドは、Web サービスのメソッドに対応しています。プロキシ・メソッドは、対応する Web サービス・メソッドと同じシグニチャを使用し、必要に応じて Web サービス・メソッドを呼び出します。このトピックでは、InterSystems IRIS で Web クライアントを作成し、使用する方法を説明します。

InterSystems IRIS Web クライアントに対する SOAP 呼び出しをログに記録する方法については "InterSystems IRIS SOAP ログ" を参照してください。

Note:

InterSystems IRIS Web サービスの場合、自動的に生成された WSDL には、SOAP ヘッダ要素に関する情報が含まれていないことがあります。

  • HeadersOut プロパティを設定することにより、手動で SOAP ヘッダを追加する場合は、"カスタム・ヘッダ要素の追加と使用" の "サポート対象のヘッダ要素の指定" の手順を実行します。これにより、すべての該当情報が WSDL に含まれるようになります。それ以外の場合は、これが行われなくなるため、WSDL をファイルに保存して、そのファイルを必要に応じて手動で編集することが必要になります。

  • SecurityOut プロパティ ("Web サービスの保護" を参照) を設定して、WS-Security ヘッダ要素を追加した場合、WSDL には必要な情報の一部が含まれなくなります。(これは、コンパイル時に WSDL が生成され、その後の実行時にヘッダが追加されるためです。)この場合は、WSDL をファイルに保存して、そのファイルを必要に応じて手動で編集してください。

    多くの理由から、WS-Policy を使用することで、WS-Security 要素の追加が簡潔で容易になります ("ポリシーの作成と使用" を参照)。WS-Policy を使用すると、生成された WSDL には必要な情報がすべて含まれます。

  • その他の場合は、生成された WSDL にすべての情報が含まれます。

W3C 仕様では、生成された WSDL を Web サービスが提供することを要求していない点に注意してください。

SOAP ウィザードの概要

InterSystems IRIS Web クライアントを作成するには、スタジオの SOAP ウィザードを使用するか、InterSystems IRIS に用意された対応するクラス・メソッドを使用します。どちらの場合も、入力は WSDL ドキュメントです。このツールでは、Web クライアント・クラスおよびサポートするすべての必要なクラスが生成されます。

このツールは、ほぼすべての WSDL ドキュメントで使用できます。"InterSystems IRIS における WSDL のサポート" を参照してください。

WSDL の URL またはファイル・パスのいずれかを指定できます。

Note:

WSDL が SOAP 1.1 および SOAP 1.2 の両方のサポートを示す場合は、SOAP ウィザードは必要に応じて 2 つのクラスのセットを生成します。

SOAP ウィザードの使用法

特定の Web サービスを記述している WSDL にアクセスできる場合は、スタジオの SOAP ウィザードを使用して、そのサービスの Web クライアントを生成できます。

Note:

プロキシ・サーバが有効になっている場合、スタジオは SOAP ウィザードなどのテンプレートから通信する際に、プロキシ・サーバを使用します。プロキシ・サーバとポートの指定については、"インターネット・ユーティリティの使用法" の "プロキシ・サーバの使用法" を参照してください。

SOAP ウィザードを使用するには:

  1. スタジオで、[ツール][アドイン][SOAP ウィザード] をクリックします。

  2. SOAP ウィザードの最初の画面で、WSDL の場所および WSDL へのアクセスに必要な SSL 構成を指定します。

    1. [URL] または [FILE] をクリックして、WSDL の形式を示します。

    2. WSDL URL を入力するか、WSDL ファイルを参照します。

    3. SSL 認証を必要とする URL を指定する場合は (URL が https で始まる場合)、以下を行います。

      1. [SSL構成] ドロップダウン・リストから SSL 構成を選択します。

        SSL/TLS 構成の作成と管理の詳細は、インターシステムズの "TLS ガイド" を参照してください。

        Important:

        [SSL構成] フィールドでは、ウィザードが WSDL へのアクセスに使用する SSL 構成のみを指定します。

      2. 必要に応じて、[SSL 接続を行う場合、接続しているシステムのシステム名がサーバ証明書のサーバIDと一致していることを確認してください] チェック・ボックスのチェックを外します。

        このチェック・ボックスにチェックが付けられている場合、ウィザードは、証明書サーバ名がサーバへの接続に使用される DNS 名と一致するかどうかを判断します。名前が一致していないと、接続は許可されません。この既定の動作は、中間者攻撃の防止を目的としています。RFC 2818Opens in a new tab のセクション 3.1 に説明があります。また、RFC 2595Opens in a new tab のセクション 2.4 で詳細も参照してください。

    4. [次へ] をクリックします。

      ウィザードは WSDL にアクセスしてこれを表示しようとします。

      失敗すると、エラーが表示されます。考えられる原因については、"WSDL を利用する際の問題" を参照してください。

      Tip:

      何回か試行しても、WSDL URL にアクセスできない場合は、代わりに WSDL をファイルとして保存し、これを参照することができます。

      アクセスに成功した場合は、[ステップ 2] 画面が表示されます。

    5. WSDL URL がパスワード認証を要求する場合は、資格情報を指定します。

      1. 使用する資格情報のタイプを選択します。

        • InterSystems IRIS の資格情報の場合は、[InterSystems IRIS ユーザ名とパスワード] を選択します。

        • HTTP 基本認証の資格情報の場合は、[HTTP 認証のユーザ名とパスワード] を選択します。

      2. [ユーザ名] フィールドと [パスワード] フィールドに入力します。

      3. [やり直してください] をクリックします。

        ウィザードでエントリは保存されません。

        ユーザ名とパスワードが有効な場合、[ステップ 2] 画面が表示されます。

      詳細は、"パスワードで保護された WSDL URL の使用法" を参照してください。

  3. SOAP ウィザード[ステップ 2] 画面で、ウィザードが WSDL からクラスを生成する方法を指定します。

    1. [クラス生成とコンパイルを制御するオプション] 領域で設定を構成します。

      設定の詳細は、"クラス生成とコンパイルを制御する SOAP ウィザードのオプション" を参照してください。

    2. [次へ] をクリックします。

      [ステップ 3] 画面が表示されます。

  4. SOAP ウィザード[ステップ 3] 画面で、ウィザードが WSDL から生成したクラスをパッケージ化する方法を指定します。

    1. 画面上部で設定を構成して、ウィザードが WSDL の XML ネームスペースからクラス・パッケージを生成する方法を決定します。

      設定の詳細は、"XML ネームスペースに関する SOAP ウィザードのオプション" を参照してください。

    2. 必要に応じて、クラス・パッケージ名を編集します。

      [パッケージ名] フィールドの詳細は、"クラス・パッケージ名についての SOAP ウィザードのルール" を参照してください。

    3. [次へ] をクリックします。

      ウィザードでクラスが生成、コンパイル、およびリストされます。その後、[ステップ 4] 画面が表示されます。

      Note:

      スキーマの要素名がアンダースコア (_) で始まる場合、その要素に生成されるクラスのプロパティはパーセント記号 (%) で始まります。

  5. [完了] をクリックします。

クラス生成とコンパイルを制御する SOAP ウィザードのオプション

SOAP ウィザードの [ステップ 2] 画面にある以下のオプションを使用して、ウィザードが WSDL から生成するクラスのタイプを指定できます。

[ウェブサービスに対するクライアントを作成]

ウィザードが WSDL で定義された Web サービスに対してクライアントとして機能するプロキシ・クラスを生成するかどうかを指定します。

[ウェブサービスを作成]

ウィザードが WSDL に基づいて、InterSystems IRIS Web サービスとして機能するクラスを生成するかどうかを指定します。

[生成されたクラスをコンパイル]

クラスの生成後にウィザードがクラスをコンパイルするかどうかを指定します。

[生成されたクラスをコンパイル] を選択した場合、[コンパイルフラグ] フィールドでフラグを指定して、コンパイラの動作を制御できます。詳細を確認するには、以下のコマンドを実行します。

 Do $System.OBJ.ShowFlags()
[クラス・タイプ]

ウィザードが WSDL から生成するクラスのタイプを指定します。以下のいずれかのオプションを選択できます。

  • [永続] — クラスは %PersistentOpens in a new tab から継承されることを指定します。コレクションはリストとして定義されます。

  • [一対多リレーションシップを使用する永続] — クラスは %PersistentOpens in a new tab から継承されることを指定します。コレクション・プロパティは一体多のリレーションシップとして定義されます。

  • [永続で一対多リレーションシップにインデックスを使用] — クラスは %PersistentOpens in a new tab から継承されることを指定します。コレクション・プロパティは一体多のリレーションシップとして定義され、InterSystems IRIS は各リレーションシップのインデックスを定義します。

  • [リレーションシップに親子を使用する永続] — クラスは %PersistentOpens in a new tab から継承されることを指定します。コレクション・プロパティは親子のリレーションシップとして定義されます。

  • [Serial] — クラスは %SerialObjectOpens in a new tab から継承されることを指定します。

  • [Registered] — クラスは %RegisteredObjectOpens in a new tab から継承されることを指定します。

[カスケード削除するために %OnDelete メソッドをクラスに追加する]

永続クラス・タイプについて、生成された各クラス定義に %OnDelete() コールバック・メソッドを実装するかどうかを指定します。[リレーションシップに親子を使用した永続化] を選択した場合は、このオプションを使用しないでください。

生成された %OnDelete() メソッドによって、クラスで参照されるすべての永続オブジェクトが削除されます。

生成されたクラスを変更する場合、必要に応じて必ず、対応する %OnDelete() コールバック・メソッドを変更してください。

[プロキシクラスパッケージ]

Web クライアントおよび生成されたクラスのパッケージ名です。

既定のパッケージ名は、サービス名です。

既存のパッケージ名を指定した場合、既定では、新たに生成されたクラスと同じ名前を持つ既存のクラスはツールによって上書きされます。

[ビジネスオペレーション作成]

プロダクションで使用できる、ビジネス・オペレーションおよび関連する要求メッセージ・クラスと応答メッセージ・クラスを生成するかどうかを指定します。

プロダクションの詳細は、"相互運用プロダクションの概要" および "プロダクション内での SOAP サービスおよび Web クライアントの追加" を参照してください。

[ビジネスオペレーション作成] を選択する場合、以下の値を指定する必要があります。

  • [ビジネス・オペレーションのパッケージ] — ビジネス・オペレーション・クラスのパッケージ名。

  • [要求パッケージ] — 要求メッセージ・クラスのパッケージ名。

  • [応答パッケージ] — 応答メッセージ・クラスのパッケージ名。

XML ネームスペースに関する SOAP ウィザードのオプション

SOAP ウィザードの [ステップ 3] 画面にある以下のオプションを使用して、WSDL から生成されるクラス・パッケージを構成できます。

[NAMESPACEクラスパラメータ追加]

NAMESPACE クラス・パラメータが Web サービスのネームスペースに設定されて、生成されたタイプ・クラスに組み込まれるかどうかを指定します。

  • 指定されたタイプが属するネームスペースが WSDL で明示的に示されている場合は、[NAMESPACE クラス・パラメータを追加] はチェックが付けられた状態で、グレー表示になります。この場合、NAMESPACE クラス・パラメータがそのネームスペースに設定され、生成されたタイプ・クラスに組み込まれます。

  • 指定されたタイプのネームスペースを WSDL が示していない場合は、[NAMESPACE クラス・パラメータを追加] にチェックを付けるか、外すかを選択できます。

[ドキュメント形式のウェブ・メソッドで改行しないメッセージ形式を使用]

生成された Web クライアントのメソッドで、改行しないメッセージ形式を使用するかどうかを指定します。このオプションは、SoapBindingStyle を "document" に設定したメソッドにのみ影響します。

以下のいずれかの文が WSDL に当てはまる場合は、このチェック・ボックスにチェックを付けます。

  • <message> 要素に複数のパートが含まれている。

  • 応答メッセージで使用するタイプが複数のネームスペースに属している。

そうでなければ、ウィザードは失敗し、次のようなエラー・メッセージが表示されます。

ERROR #6425: Element 'wsdl:binding:operation:msg:input' - message 'AddSoapOut' 
Message Style must be used for document style message with 2 or more parts.

詳細は、"生成されたクラスの詳細" および "InterSystems IRIS Web クライアント・クラスの使用法" を参照してください。

[配列プロパティを作成しない]

ウィザードで配列プロパティを生成するかどうかを指定します。

このオプションを選択すると、ウィザードでは、配列プロパティが生成されない代わりに別の形式が生成されます。詳細は、"配列プロパティの作成" を参照してください。

[ヌル可能な要素に XMLNIL プロパティ・パラメータを生成]

生成されたクラスの使用可能なプロパティに対して、XMLNIL プロパティ・パラメータをウィザードで指定するかどうかを示します。

このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNIL=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。

このプロパティ・パラメータの詳細については、"オブジェクトの XML への投影" の "空文字列および NULL 値の処理" を参照してください。

[ヌル可能な要素に対してプロパティパラメータ XMLNILNOOBJECT を生成する]

生成されたクラスの使用可能なプロパティに対して、XMLNILNOOBJECT プロパティ・パラメータをウィザードで指定するかどうかを示します。

このオプションは nillable="true" で指定された XML 要素に対応する各プロパティに適用されます。このオプションを選択した場合、ウィザードにより XMLNILNOOBJECT=1 がプロパティ定義に追加されます。それ以外の場合、このパラメータの追加はありません。このパラメータの詳細は、"オブジェクトの XML への投影" の "空文字列および NULL 値の処理" を参照してください。

[XMLSEQUENCE パラメータに 0 を設定]

ウィザードが、生成されたクラスで XMLSEQUENCE クラス・パラメータを 0 に設定するかどうかを指定します。

ウィザードは既定では、生成されるクラスのこの値を 1 に設定します。これにより、クラスが WSDL のスキーマで指定された要素の順序に従います。この値は、スキーマに、特定の親の同じ名前の複数の要素がある場合に役立ちます。詳細は、"オブジェクトの XML への投影" の "複数の同名のタグを含む XML ドキュメントの処理" を参照してください。

[XMLIGNORENULL パラメータに 1 をセットして生成]

ウィザードが生成されたクラスで XMLIGNORENULL クラス・パラメータを指定するかどうかを示します。

このオプションを選択した場合、ウィザードにより XMLIGNORENULL=1 が、生成される Web クライアント (または Web サービス) などのクラス定義に追加されます。それ以外の場合、このパラメータの追加はありません。

このクラス・パラメータの詳細は、"オブジェクトの XML への投影" の "空文字列および NULL 値の処理" を参照してください。

[バイナリにはストリームを使用]

ウィザードがタイプ xsd:base64Binary の各要素にタイプ %Stream.GlobalBinaryOpens in a new tab のプロパティを生成するかどうかを指定します。

このオプションを選択すると、生成されるプロパティのタイプが %Stream.GlobalBinaryOpens in a new tab になります。あるいは、プロパティのタイプは %xsd.base64BinaryOpens in a new tab になります。

ウィザードは、タイプ xsd:base64Binary属性を無視します。

[SECURITYIN クラス・パラメータを指定]

生成されたクライアント・クラスで、SECURITYIN クラス・パラメータの値を指定します。

Web サービス・セキュリティを使用している場合、クライアントにそれらの要素を要求するか、単純にそれらを検証するかで、REQUIRE または ALLOW を使用します。そうでない場合は、IGNORE または IGNOREALL が一般に適しています。詳細は、"Web サービスの保護" の "WS-Security ヘッダの検証" を参照してください。

SECURITYIN パラメータは、関連付けられた (そしてコンパイルされた) 構成クラスにセキュリティ・ポリシーがある場合、無視されます。"Web サービスの保護" を参照してください。

クラス・パッケージ名についての SOAP ウィザードのルール

SOAP ウィザードでは、クラス・パッケージ名に次のルールを適用します。

  • [ウェブ・クライアントのパッケージ] および [ウェブ・サービスのパッケージ] フィールドで指定されたパッケージには、生成された主な Web クライアント・クラスまたは Web サービス・クラスが含まれます。これらの値は、ウィザードの前のページでのエントリによって初期化されます。

  • ウィザードでポリシー・クラスも生成される場合 (WSDL に WS-Policy 情報が含まれているため)、そのクラスは既定で同じパッケージに含まれます。別のパッケージを指定するには、[構成サブパッケージ] で値を指定します。

    既定では、このクラス名は、Web クライアント名または Web サービス名に Config を追加したものです。[構成サブパッケージ] に値を指定すると、この生成されたクラスの名前が Web クライアントまたは Web サービスと同じになります (ただし、代わりにこのクラスは指定されたサブパッケージ内に含まれます)。

    WS-Policy については、"Web サービスの保護" を参照してください。

  • 生成されるどのサポート・クラスに対しても、ウィザードによって WSDL で使用されているすべてのネームスペースが検出されます。既定では、生成されたクラスはパッケージに分類されます (ネームスペースごとに 1 つのパッケージ)。

    必要に応じて、これらのパッケージ名を編集します。

    すべてのネームスペースが生成されたクラスに対応するとは限りません。例えば、この例の WSDL はネームスペース http://schemas.xmlsoap.org/wsdlhttp://schemas.xmlsoap.org/wsdl/mime、および http://schemas.xmlsoap.org/wsdl/soap を使用します。この場合、これらのネームスペースには生成されたクラスがなく、対応するパッケージは生成されません。

プログラムによるクライアント・クラスの生成

プログラムによってクライアント・クラスを生成することもできます。これには、%SOAP.WSDL.ReaderOpens in a new tab クラスを使用します。

結果として生成されたクラスとそれらの構成は、SOAP ウィザードを使用した場合と異なることがあります。SOAP ウィザードでは、生成されたクラスのパッケージに対してより詳細な管理を行うことができます。

プログラムによってクライアント・クラスを生成する手順は以下のとおりです。

  1. %SOAP.WSDL.ReaderOpens in a new tab のインスタンスを作成します。

  2. 必要に応じて、インスタンスの動作を制御するプロパティを設定します。詳細は、%SOAP.WSDL.ReaderOpens in a new tab のクラス・ドキュメントを参照してください。

    WSDL が SSL を使用する場所にある場合、%SOAP.WSDL.ReaderOpens in a new tab は、証明書サーバ名がサーバへの接続に使用される DNS 名と一致するかどうかをチェックする (既定の動作) 点に注意してください。これらの名前が一致していないと、接続は許可されません。この既定の動作は、中間者攻撃の防止を目的としています。RFC 2818Opens in a new tab のセクション 3.1 に説明があります。また、RFC 2595Opens in a new tab のセクション 2.4 も参照してください。

    このチェックを無効にするには、インスタンスの SSLCheckServerIdentity プロパティを 0 に設定します。

  3. %SOAP.WSDL.ReaderOpens in a new tab で直接サポートされていない方法で HTTP 要求を制御できるようにする必要がある場合は、以下の手順を実行します。

    1. %Net.HttpRequestOpens in a new tab のインスタンスを作成し、必要に応じてプロパティを設定します。

    2. %SOAP.WSDL.ReaderOpens in a new tab のインスタンスに対して、作成した %Net.HttpRequestOpens in a new tab のインスタンスと同じ HttpRequest プロパティを設定します。

    例えば、これは、サーバで認証が必要な場合に行います。"インターネット・ユーティリティの使用法" の "HTTP 要求の送信" にある "ログイン資格情報の提供" を参照してください。

  4. インスタンスの Process() メソッドを呼び出します。

    method Process(pLocationURL As %String, pPackage As %String = "") as %Status 
    
    • pLocationURL は、Web サービスの WSDL の URL、または WSDL ファイルの名前 (完全パスを含む) でなければなりません。Web サービスの構成によっては、適切なユーザ名とパスワードを指定する文字列を追加する必要があります。例を参照してください。

    • pPackage は、生成されたクラスを配置するパッケージの名前です。パッケージを指定しないと、InterSystems IRIS は、サービス名をパッケージ名として使用します。

      Note:

      このパッケージが既存のパッケージと同じである場合、既定では、既存の同名のクラスが上書きされます。クラス定義が上書きされないようにするには、クラス定義に次の指定を追加します。

      Parameter XMLKEEPCLASS = 1;

ターミナル・セッションの例を以下に示します。

set r=##class(%SOAP.WSDL.Reader).%New() 
GSOAP>set url="http://localhost:52773/csp/gsop/GSOP.AddComplexWS.CLS?WSDL=1"
 
GSOAP>d r.Process(url) 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.ns2.ComplexNumber
Compiling routine AddComplex.ns2.ComplexNumber.1
Compilation finished successfully in 0.170s.
 
Compilation started on 11/09/2009 12:53:52 with qualifiers 'dk'
Compiling class AddComplex.AddComplexSoap
Compiling routine AddComplex.AddComplexSoap.1
Compiling class AddComplex.AddComplexSoap.Add
Compiling routine AddComplex.AddComplexSoap.Add.1
Compilation finished successfully in 0.363s.

WSDL URL は、Web アプリケーションの一部です。Web アプリケーションは、パスワード認証によって保護されている可能性があります。このような場合に WSDL を使用して InterSystems IRIS Web クライアントまたはサードパーティの Web クライアントを生成する方法の詳細は "パスワードで保護された WSDL URL の使用法" を参照してください。

どのような場合でも、必要なユーザ名とパスワードを指定した後、ブラウザから WSDL を取得して、これをファイルとして保存し、そのファイルを代わりに使用することもできます。

生成された Web クライアント・クラスの変更

通常は、InterSystems IRIS Web クライアント・クラスを生成した後で、そのクラスを編集することはありません。その代わりに、Web クライアントのインスタンスを作成するコードと、クライアント側のエラー処理を提供するコードを記述します。このセクションでは、生成されたクライアント・クラスに変更を加える際の主な例外について説明します。

"生成されたクラスの Web メソッドに関するその他の注意事項" と "InterSystems IRIS での Web クライアントの調整" も参照してください。

Note:

生成された Web クライアント・クラスのサブクラスは作成しないでください。コンパイラは、適切な実行に必要なサポート・クラスを生成しないため、そのサブクラスは使用できなくなります。

生成されたクラスをきわめて長い文字列に合わせて調整する方法

まれに、値の長さが文字列長の制限を超える、きわめて長い文字列やバイナリ値に対応できるように、生成されたクライアント・クラスの編集が必要になることがあります。

SOAP ウィザードで WSDL を読み取る場合、InterSystems IRIS では文字列タイプの入出力を %StringOpens in a new tab として表現できることが前提となっていますが、そのように表現できないこともあります。まれに、文字列が文字列長の制限を超えることがあります。同様に、InterSystems IRIS では XML タイプ base64Binary の入出力を %xsd.base64BinaryOpens in a new tab として表現できることが前提となっていますが、文字列長に関する同様の制限によって、そのように表現できないこともあります。どちらの場合も、WSDL には、その入出力が文字列長の制限を超える可能性があることを示す情報は含まれません。

長すぎる文字列またはバイナリ値が Web クライアントで検出されると、次のいずれかのエラーがスローされます。

  • <MAXSTRING> エラー

  • データ型検証エラー

    ERROR #6232: Datatype validation failed for tag your_method_name ...
    

    (当然ながら、このエラーはデータ型の不一致が原因で発生することもあります。)

ただし、この問題は簡単に修正できます。生成された Web クライアント・クラス (特に、%SOAP.WebClientOpens in a new tab から継承されたクラス) のメソッド・シグニチャを、適切なストリーム・クラスを使用するように調整します。

例えば、引数を取らず、非常に長い文字列を返すメソッド (WriteIt) が 1 つ含まれる Web サービス (MyGiantStringService) について考えてみます。SOAP ウィザードを使用して Web クライアント・クラスを生成すると、Web クライアント・クラスは最初は次のようになります。

Class GetGiantString.MyServiceSoap Extends %SOAP.WebClient
{

Method WriteIt() As %String 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{
 Quit ..WebMethod("WriteIt").Invoke($this,"http://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

}

この場合、行う調整は 1 つだけです。WriteIt の返りタイプを次のように変更します。

Method WriteIt() As %GlobalCharacterStream 
[Final,SoapBindingStyle=document,SoapBodyUse=literal,WebMethod]
{
 Quit ..WebMethod("WriteIt").Invoke($this,"http://tempuri.org/MyApp.MyGiantStringService.WriteIt")
}

このクラスをコンパイルすると、関連するクラスが必要に応じて自動的に再生成されます。

生成されたタイプのクラス内のプロパティ・タイプの調整が必要な場合があります。例えば、タイプ文字列の要素 <ContainerPart> が組み込まれた <Container> という要素を Web サービスで使用しているとします。InterSystems IRIS Web クライアント・クラスを生成すると、タイプ %StringOpens in a new tabContainerPart プロパティによって Container クラスが作成されます。Web サービスから <ContainerPart> 要素で文字列長の制限を超える文字列が送信された場合、Web クライアントはエラーをスローします。このエラーを回避するには、ContainerPart プロパティのタイプを %GlobalCharacterStreamOpens in a new tab に変更します。

その他の調整

WSDL が Web サービスの場所を指定しない場合、SOAP ウィザードは Web クライアントの LOCATION パラメータを指定しません。これは一般的なケースではありません。このシナリオでは、Web クライアント・クラスを編集して LOCATION パラメータを含めるようにします。例えば以下のようになります。

Parameter LOCATION = "http://localhost:52773/csp/gsop/GSOP.AddComplexWS.cls";

または、Web クライアント・インスタンスの Location プロパティを、このトピックで後から示すように指定します。

Web クライアント・クラスの他のパラメータを調整して、その他の変更を加える必要がある場合があります。詳細は、"InterSystems IRIS での Web クライアントの調整" を参照してください。

生成された Web クライアント・クラスの使用法

前述のセクションで説明したように、通常は、InterSystems IRIS Web クライアント・クラスを生成した後で、生成されたクラスを編集することはありません。その代わりに、その Web クライアントのインスタンスを作成するコードと、クライアント側のエラー処理を提供するコードを記述します。このコードでは、以下の処理を実行します。

  1. Web クライアント・クラスのインスタンスを作成します。

  2. インスタンスのプロパティを設定します。ここでは、以下のような項目を制御できます。

    • Web クライアントのエンドポイント (Web クライアントで使用する Web サービスの URL)。制御するには、Location プロパティを設定します。これは、Web クライアント・クラスの LOCATION パラメータをオーバーライドします。

    • プロキシ・サーバを指定する設定。

    • HTTP 基本認証を制御する設定。

    次のセクションと "InterSystems IRIS での Web クライアントの調整" を参照してください。

  3. 必要に応じて、Web クライアントのメソッドを呼び出します。

  4. クライアント側のエラー処理を実行します。"SOAP フォルトの処理" を参照してください。

  5. このトピックで後述するように、オプションで、Web クライアントが受け取る HTTP 応答を検証します。

ターミナルのセッションからの簡単な例を以下に示します。

GSOAP>set client=##class(Proxies.CustomerLookupServiceSoap).%New()

GSOAP>set resp=client.GetCustomerInfo("137")
 
GSOAP>w resp
 
11@Proxies.CustomerResponse

GSOAP>w resp.Name
Smith,Maria

例 1 : ラップされたメッセージを使用するクライアントの使用法

この例では、ラップされたメッセージを使用する Web クライアントのラッパ・クラスを作成します。前に示した GSOAPClient.AddComplex.AddComplexSoap の例を使用するために、次のようなクラスを作成します。

Class GSOAPClient.AddComplex.UseClient Extends %RegisteredObject
{

ClassMethod Add(arg1 As ComplexNumber, arg2 As ComplexNumber) As ComplexNumber
{
    Set client=##class(AddComplexSoap).%New()
    //uncomment the following to enable tracing
    //set client.Location="http://localhost:8080/csp/gsop/GSOP.AddComplexWS.cls"
    Set ans=client.Add(arg1,arg2)
    Quit ans 
}

}

クライアント・アプリケーションは、Web メソッドを実行するために、このメソッドを呼び出します。

例 2 : ラップされていないメッセージを使用するクライアントの使用法

この例では、ラップされていないメッセージを使用する Web クライアントのラッパ・クラスを作成します。前に示した GSOAPClient.AddComplex.AddComplexSoap の例を使用するために、次のようなクラスを作成します。

Class GSOAPClient.AddComplexUnwrapped.UseClient Extends %RegisteredObject
{

ClassMethod Add(arg1 As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber, 
arg2 As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber) 
As GSOAPClient.AddComplexUnwrapped.s0.ComplexNumber
{
    //create the Add message
    Set addmessage=##class(GSOAPClient.AddComplexUnwrapped.s0.Add).%New()
    Set addmessage.a = arg1
    Set addmessage.b = arg2

    Set client=##class(AddComplexSoap).%New()
    
    //send the Add message to client and get response
    Set addresponse=client.Add(addmessage)
    
    //get the result from the response message
    Set ans=addresponse.AddResult
    
    Quit ans
 
}

}

このメソッドには、普通に想定されるシグニチャがあります。つまり、このメソッドは 2 つの複素数を受け取り、1 つの複素数を返します。このメソッドは Web クライアントが必要とするメッセージを作成します。このメッセージの要素は 2 つの複素数です。

サンプル・コードを見るとわかるように、ラップされていないメッセージを Web クライアントで使用する場合は、ユーザにわかりやすい形式の引数を Web クライアントで使用するメッセージに変換する必要があるので、作成するコード量が若干多くなります。

Web クライアント・インスタンスのプロパティの調整

Web クライアント・クラスのインスタンスを使用するとき、そのインスタンスのプロパティを指定して動作を制御できます。このセクションでは、一般的に設定することが多いプロパティとその既定値について説明します。

Web クライアントのエンドポイントの変更

SOAP ウィザードでは、Web クライアントの LOCATION パラメータを設定することにより、Web クライアントにエンドポイントが自動的に設定されます。既定では、このパラメータは、通信する Web サービスの URL と同じに設定されます。

この設定を変更するには、Web クライアント・インスタンスの Location プロパティを設定します。Location が NULL の場合に、LOCATION パラメータが使用されます。

一般的な使用法の 1 つとして、トレースを有効にするために別のポートを使用するように Location プロパティを設定します。例えば、生成された Web クライアント・クラスでエンドポイントが次のように定義されているとします。

Parameter LOCATION = "http://localhost:52773/csp/gsop/GSOP.AddComplexWS.cls";

このクライアントを使用するときに、次の行を追加します。

   Set client.Location="http://localhost:8080/csp/gsop/GSOP.AddComplexWS.cls"
Note:

WSDL が Web サービスの場所を指定しない場合、SOAP ウィザードは Web クライアントの LOCATION パラメータを指定しません。これは一般的なケースではありません。このシナリオでは、Web クライアント・クラスを編集して LOCATION パラメータを含めるようにするか、または Web クライアント・インスタンスの Location プロパティをここに示すように指定します。

SSL を使用するようにクライアントを構成する方法

Web クライアントのエンドポイントで HTTPS プロトコルを使用する場合は、SSL を使用するようにその Web クライアントを構成する必要があります。具体的には以下のとおりです。

  • まだ作成していない場合は、管理ポータルを使用して、必要な SSL 接続の詳細を格納する SSL/TLS 構成を作成します。詳細は、"TLS ガイド" の "構成について" を参照してください。

  • Web クライアントの SSLConfiguration プロパティを SSL/TLS 構成名に等しくなるように設定します。

プロキシ・サーバ経由でクライアントを接続している場合は、Web クライアントで HttpProxySSLConnect プロパティを 1 に設定する必要もあります。プロキシ・サーバを使用するように InterSystems IRIS Web クライアントを構成する方法については、"Web クライアントの調整" を参照してください。

SOAP バージョンの指定

SOAP ウィザードでは、Web サービスの WSDL で使用している SOAP バージョンに基づいて、要求メッセージで使用する SOAP バージョンが自動的に指定されます。具体的には、SOAPVERSION パラメータが設定されます。

この設定を変更するには、Web クライアント・インスタンスの SoapVersion プロパティを設定します。以下の値のいずれかを使用します。

  • "" — クライアントは SOAP 1.1 メッセージを送信します。

  • "1.1" — クライアントは SOAP 1.1 メッセージを送信します。

  • "1.2" — クライアントは SOAP 1.2 メッセージを送信します。

SoapVersion が NULL の場合に、SOAPVERSION パラメータが使用されます。

その他の調整

Web クライアント・インスタンスの他のプロパティを設定して、その他の変更を加える必要がある場合があります。詳細は、"InterSystems IRIS での Web クライアントの調整" を参照してください。

HTTP 応答の使用法

既定では、Web クライアント・メソッドを呼び出す場合、HTTP 経由で呼び出されます。HTTP 応答は、Web クライアント・インスタンスの HttpResponse プロパティとして使用できるようになります。このプロパティは %Net.HttpResponseOpens in a new tab のインスタンスであり、以下のようなプロパティが含まれています。

  • Headers には、HTTP 応答のヘッダが含まれます。

  • Data は、HTTP 応答のデータを格納する InterSystems IRIS 多次元配列です。

  • StatusCodeStatusLine、および ReasonPhrase はステータス情報を提供します。

詳細は、"インターネット・ユーティリティの使用法" を参照するか、%Net.HttpResponseOpens in a new tab のクラス・ドキュメントを参照してください。

FeedbackOpens in a new tab