Web サービスコンシューマの作成

バージョン 7.0 で Web サービス設計要素が導入されました。これにより、Web サービスを作成して Domino サーバーにホストし、他のコンピュータから呼び出せるようになりました。

バージョン 8.0 では、他の場所でホストされている Web サービスを専用のスクリプトライブラリ経由で呼び出す機能が導入されました。バージョン 8.5 の場合、Web サービスコンシューマ要素を使用して Web サービスの呼び出しを実行します。Web サービスプロバイダの設計要素を使用するのは、Web サービスをホストする場合だけです。

注: バージョン 7.0 以前では、Java を使用して独自の Web サービスコンシューマを作成できましたが、Domino Designer には作成に関する支援機能はありませんでした。

Web サービスコンシューマを作成するには

Web サービスコンシューマを作成すると、単一の WSDL 文書によって定義される単一の Web サービスが各コンシューマ内に設定されます。

  1. 使用する Web サービスとそのサービスに関連付けられている WSDL 文書を確認します。
  2. [作成] - [設計] - [Web サービスコンシューマ] を選択します。
  3. Web サービスコンシューマの名前を入力します。
    注: データベース内の他の Web コンシューマの名前と重複しない名前を入力する必要があります。これは、多言語データベースの場合も同じです。設計文書の $Language フィールドを使用して、同じ名前を持つ複数の Web サービスコンシューマを区別することはできません。
  4. 次のいずれかの言語を選択します。
    • LotusScript
    • Java
  5. ローカルの WSDL ファイルの場所を入力 (または参照) するか、WSDL ファイルの場所を指定する URL を入力します。
  6. [OK] をクリックします。

以上の操作により、WSDL 文書内で記述されるサービスを表す LotusScript コード (または Java コード) が生成されます。生成されるコードには、クラス名、フィールド、それらの種類、関数またはサブルーチンが記述され、すべて WSDL 文書から取り出されます。このコードにより、1 つ以上の PortType クラスが生成されます。さらに、任意の数の値型クラスが生成される場合があります。

PortType クラスで Web サービスの一連の操作を定義します。

LotusScript の PortType クラスは、「PortTypeBase」というクラスを継承して LSXSD.LSS 内に定義されます。この情報を基に、PortType クラスを特定することができます。

Java の PortType クラスは、lotus.domino.types.PortTypeBase クラスを継承しているため、特定できます。また、各 PortType クラスには Service と ServiceLocator と呼ばれる 2 つの追加の関連するクラスがあり、2 つとも Java の PortType クラスのインスタンスの作成に使用されます。

値型クラスは Web サービスコンシューマの作成操作によって生成されるその他すべての型で、アプリケーションのデータを収納する際に使用されます。PortType クラスで宣言される操作で使用されます。WSDL 文書で値型をまったく宣言しないことも可能です。

複数の Web サービスコンシューマ間で、値型を共有することができます (PortType クラスは共有できません)。PortType クラスは、最初に生成されたときの Web サービスコンシューマの設計要素とともに存在する必要があります。値型を Web サービスコンシューマ間で移動すると、以下のようなことが分かります。

Web サービスコンシューマをエージェント内で使用するには

Web サービスコンシューマ経由で Web サービスを呼び出す場合、対象の Web サービスコンシューマをコードの先頭に記述する必要があります (LotusScript の場合は「USE」ステートメント、Java の場合は [プロジェクトの編集] ダイアログを使用します)。こうして Web サービスコンシューマのクラスを作成したら、後はこのクラスのインスタンスを作成するだけです。このクラスは、PortTypeBase (Java の場合の完全な名前は lotus.domino.types.PortTypeBase) のサブクラスになります。このクラスのメソッドは対象とする Web サービスの操作に直接対応し、コードから呼び出すことができます。

Web サービスコンシューマを結合して効率を向上させる

ユーザーの Notes データディレクトリ内で管理されるテキストファイルの形式で、複数の Web サービスコンシューマを簡単に使用するための機能も用意されています。WSDL 文書を Web サービスコンシューマに呼び出すと、「WSNamespace.mappings」というファイルが Domino Designer によって作成され、WSDL の名前空間と、それに関連する LotusScript の定数が記録されます。利用者の WSDL を呼び出すと、呼び出した Web サービス PortType クラスを含む、生成されるクラスを関連付けるための方式のような定数が、WSDL 文書に指定されているとおりに、対応する名前空間に生成されます。この方法により、LotusScript 識別子の最大長に違反したことが原因で呼び出しが失敗する可能性を最小限にしながら、クラスをその定義名前空間に関連付けることができます。

例えば、次の WSDL 複合型を例として示します。

<schema targetNamespace="urn:myCompanyNamespace">

  <complexType name="MyCompanyPersonRecord">
    	<element name="Name" type="xsd:string"/>
    	<element name="Address" type="xsd:string"/>
  </complexType>

</schema>

この複合型は、LotusScript の Web サービスコンシューマに次の形式で呼び出すことができます。

  Const n0 = "urn:myCompanyNamespace"        'generated namespace constant

  class MyCompanyPersonRecord_n0             'namespace-qualified class, 
                                             'associated via its "_n0" suffix
    public Name_ As String
    public Address As String
  end class

...さらに、テキストファイル WSNamespaces.mappings に次のエントリが生成されます。

  n0=urn:myCompanyNamespace

次に、これと同じ Domino Designer のインストール環境を使用して LotusScript の Web サービスコンシューマに WSDL 文書を呼び出した場合、「n0」名前空間の定数を再度使用して「urn:myCompanyNamespace」名前空間が指定されます。これは、複数の Web サービスコンシューマ間で、名前空間の定義とクラスの関連付けの一貫性を維持するためです。また、ファイルをテキストエディタで編集して、後続の WSDL の呼び出し時に適用するように前もって決められている、定数と名前空間のマッピングを含めることができます。上述の例では、「urn:myCompanyNamespace」名前空間内の MyCompanyPersonRecord complexType を含む、または参照する任意の WSDL 文書は常に、「MyCompanyPersonRecord_n0」として呼び出され、当該クラスをいくつかの共通の共有スクリプトライブラリに移動できます。