Web サービスインターフェースは、XML を使用して Web Services Description Language (WSDL) 文書によって構造的に記述されます。Domino® Designer は、WSDL からのインポートと WSDL へのエクスポートの両方をサポートします。WSDL 文書は、Java™ または LotusScript® の骨組みの実装にインポートしたり、LotusScript または Java Web サービスの実装から生成したりできます。また、Domino では、Web サービスの実装オブジェクトとそれに関連する WSDL 構造の間のマッピングに基づいて、ランタイム SOAP メッセージから実装への直列化/非直列化を行います。
Domino Designer 8.0 では、7.0 で提供された基本の XML スキーマのサポートが次のように拡張されました。
さらに、バージョンごとに次の動作が採用されました。
WS-I (Web Service Interoperability Organization) では、共通でサポートされる機能による相互運用性を確保するために Web サービスを説明する Basic Profile を規定しています。WS-I Basic Profile 1.1 では、SOAP でエンコードされる配列を明示的に禁止しています。
LotusScript および Java のプログラム内に、配列はさまざまな形式とコンテキストで現れます。
Lotus N/D 7.0.x では、これらは Designer が生成した WSDL で SOAP エンコードされた配列に機械的にマップされます (基となった Axis 1.1 のオープンソース実装を受け継いでいます)。この動作は、エンコード済みのサービスでのみ維持されます。Domino 8.0 では、リテラルサービスの新しい動作を採用します (rpc/literal、document/literal、wrapped)。
WS-I のリテラルサービスに準拠するため、後述のようにして配列から WSDL 1.1 が生成されます。
LotusScript の配列は次のように表されます。
LotusScript の配列要素は、組み込み型、クラス、ユーザー定義型、または別の配列である場合があります。
動的な配列の次元 (多次元を含む) は、実行時にのみ解決されます。生成された WSDL には、fixups/reimport が必要な場合があります。
固定サイズの配列の次元は、WSDL 生成中に検出されません。生成された WSDL には、fixups/reimport が必要な場合があります。
Java の配列は次のように表されます。
Java の配列の基本要素は、組み込み型、クラス (java.lang.Object など)、または別の配列である場合があります。
次の Java クラスも配列に似ています。
LotusScript 配列の関数またはサブルーチンの入力パラメータ、関数またはサブルーチンの出力パラメータ、関数の戻り値の型は、次の方法で WSDL として生成されます。
1. エンコードされたサービス (現在の 7.0 の動作) では、WSDL は次のように生成されます。
名前付きの SOAPENC 配列ベースの <complexType> が、"soapenc:Array" 型からの制限によって派生します。例えば、次のようになります。
<complexType name="ArrayOf_xsd_string">
<complexContent>
<restriction base="soapenc:Array">
<attribute ref="soapenc:arrayType" wsdl:arrayType="xsd:string[]"/>
</restriction>
</complexContent>
</complexType>
2. リテラルサービス (8.0 の新機能) では、WSDL は次のように生成されます。
名前付きの <complexType> に、基となる配列要素の基底型として型の付いた <element> の <sequence> を指定し、属性 maxOccurs="unbounded" を指定します。例えば、次のようになります。
<complexType name="xsd_stringArray">
<sequence>
<element name="item" minOccurs="0" maxOccurs="unbounded" type="xsd:string"/>
</sequence>
</complexType>
LotusScript の動的配列クラスメンバーおよび固定サイズの配列型メンバーから、次の方法で WSDL が生成されます。
3. エンコードされたサービス (現在の 7.0 の動作) では、WSDL は次のように生成されます。
親 LotusScript クラスからマッピングされた <complexType> のメンバー <element>。ここで、メンバー要素の <schema> データ型はフォーム 1 の一部です。例えば、次のようになります。
<complexType name="ParentLSClass">
...
<element name="member" type="impl:ArrayOf_xsd_String/>
...
</complexType>
4. リテラルサービス (8.0 の新機能) では、WSDL は次のように生成されます。
基となる配列要素の基底型として型の付いたメンバー <element> に、属性 maxOccurs="unbounded" を指定します。
<complexType name="ParentLSClass">
...
<element name="member" maxOccurs="unbounded" nillable="true" type="xsd:string"/>
...
</complexType>
Java のメソッドの入力パラメータ、メソッドの出力パラメータ、メソッドの戻り値の型から次のようにして WSDL が生成されます。
1. エンコードされたサービスの場合 -- 「LotusScript の例」の 1 番目の例を参照してください。
2. リテラルサービスの場合 -- 「LotusScript の例」の 2 番目の例を参照してください。
Java クラスメンバーから次のようにして WSDL が生成されます。
3. エンコードされたサービス (現在の 7.0 の動作) では、WSDL は次のように生成されます。
a. 親 Java クラスからマッピングされた <complexType> のメンバー <element>。ここで、メンバー要素の <schema> データ型はフォーム 1 の一部です。例えば、次のようになります。
<complexType name="ParentJavaClass">
...
<element name="member" type="impl:ArrayOf_xsd_String/>
...
</complexType>
または
b. 基となる配列要素の基底型として型の付いたメンバー <element> に、属性 maxOccurs="unbounded" を指定します (ここで、実装 Java クラスメンバーは Java Bean の索引付きの プロパティです)。例えば、次のようになります。
<complexType name="ParentJavaClass">
...
<element name="member" maxOccurs="unbounded" nillable="true" type="xsd:string"/>
...
</complexType>
4. リテラルサービス (8.0 の新機能) では、WSDL は次のように生成されます。
基となる配列要素の基底型として型の付いたメンバー <element> に、属性 maxOccurs="unbounded" を指定します。
<complexType name="ParentJavaClass">
...
<element name="member" maxOccurs="unbounded" nillable="true" type="xsd:string"/>
...
</complexType>
5. 例外の Java クラスは次のようにマッピングされます。
java.util.ArrayList |
「エンコードされた」サービスの soapenc:Array 「リテラル」サービスのリテラル配列 (8.0 の新しいマッピング) |
---|---|
java.util.Collection |
「エンコードされた」サービスの soapenc:Array 「リテラル」サービスのリテラル配列 (8.0 の新しいマッピング) |
java.util.HashMap |
apachesoap:Map |
java.util.HashTable |
apachesoap:Map |
java.util.Map |
apachesoap:Map |
java.util.Vector |
apachesoap:Vector |