拡張 WSDL XML スキーマのサポート

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 が生成されます。

注: 例では一般に基底型 "xsd:string" の配列が示されますが、実際には配列の要素は単純型または複合型のこともあります。

LotusScript の配列

LotusScript の配列は次のように表されます。

  1. 関数またはサブルーチンの入力パラメータ (非直列化によって無効にされます)
  2. 関数またはサブルーチンの出力パラメータ (ホルダークラス。非直列化またはサービス実装によって無効にされます)
  3. 関数の戻り値の型 (ホルダークラス内。サービスによって無効にされます)
  4. クラスのメンバー、動的な配列 (非直列化またはサービス実装によって無効にされます)
  5. クラスのメンバー、固定サイズの配列 (サポートされていません)
  6. 型のメンバー、固定サイズの配列 (コンパイル時に無効にされます)

LotusScript の配列要素は、組み込み型、クラス、ユーザー定義型、または別の配列である場合があります。

動的な配列の次元 (多次元を含む) は、実行時にのみ解決されます。生成された WSDL には、fixups/reimport が必要な場合があります。

固定サイズの配列の次元は、WSDL 生成中に検出されません。生成された WSDL には、fixups/reimport が必要な場合があります。

Java 配列

Java の配列は次のように表されます。

  1. メソッドの入力パラメータ (宣言された次元)
  2. メソッドの出力パラメータ (ホルダークラス内、宣言された次元)
  3. メソッドの戻り値の型 (宣言された次元)
  4. クラスのメンバー (宣言された次元)

Java の配列の基本要素は、組み込み型、クラス (java.lang.Object など)、または別の配列である場合があります。

次の Java クラスも配列に似ています。

LotusScript 例

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>
注: 現在は、<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 の例

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>
注: Java メンバーが多次元配列の場合、型の属性値はフォーム 2 の WSDL <schema> データ型を参照します。

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

注: WSDL に生成された "Map" 型および "Vector" 型は、http://xml.apache.org/xml-soap ("apachesoap") ターゲット名前空間に由来します。
注: byte[ ] 配列は、引き続き "xsd:base64Binary" 型にマッピングされます (現在の 7.0 の動作)。