WEB アプリケーション用に LOTUS DOMINO をプログラミングする
バージョン 8.0 では、他の場所でホストされている Web サービスを専用のスクリプトライブラリ経由で呼び出す機能が導入されました。バージョン 8.5 の場合、Web サービスコンシューマ要素を使用して Web サービスの呼び出しを実行します。Web サービスプロバイダの設計要素を使用するのは、Web サービスをホストする場合だけです。
メモ バージョン 7.0 以前では、Java を使用して独自の Web サービスコンシューマを作成できましたが、Lotus Domino Designer には作成に関する支援機能はありませんでした。
Web サービスコンシューマを作成するには
Web サービスコンシューマを作成すると、単一の WSDL 文書によって定義される単一の Web サービスが各コンシューマ内に設定されます。
1. 使用する Web サービスとそのサービスに関連付けられている WSDL 文書を確認します。
2. [作成] - [設計] - [Web サービスコンシューマ] を選択します。
3. Web サービスコンシューマの名前を入力します。
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 サービスコンシューマをコードの先頭に記述する必要があります (LotusScript の場合は「USE」ステートメント、Java の場合は [プロジェクトの編集] ダイアログを使用します)。こうして Web サービスコンシューマのクラスを作成したら、後はこのクラスのインスタンスを作成するだけです。このクラスは、PortTypeBase (Java の場合の完全な名前は lotus.domino.types.PortTypeBase) のサブクラスになります。このクラスのメソッドは対象とする Web サービスの操作に直接対応し、コードから呼び出すことができます。
Web サービスコンシューマを結合して効率を向上させる
ユーザーの Lotus Notes データディレクトリ内で管理されるテキストファイルの形式で、複数の Web サービスコンシューマを簡単に使用するための機能も用意されています。WSDL 文書を Web サービスコンシューマに呼び出すと、「WSNamespace.mappings」というファイルが Lotus 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
次に、これと同じ Lotus Domino Designer のインストール環境を使用して LotusScript の Web サービスコンシューマに WSDL 文書を呼び出した場合、「n0」ネームスペースの定数を再度使用して「urn:myCompanyNamespace」ネームスペースが指定されます。これは、複数の Web サービスコンシューマ間で、ネームスペースの定義とクラスの関連付けの一貫性を維持するためです。また、ファイルをテキストエディタで編集して、後続の WSDL の呼び出し時に適用するように前もって決められている、定数とネームスペースのマッピングを含めることができます。上述の例では、「urn:myCompanyNamespace」ネームスペース内の MyCompanyPersonRecord complexType を含む、または参照する任意の WSDL 文書は常に、「MyCompanyPersonRecord_n0」として呼び出され、当該クラスをいくつかの共通の共有スクリプトライブラリに移動できます。
関連項目