34.4. リスト

概要

XML スキーマは、スペースで区切られた単純型のリストであるデータ型を定義するためのメカニズムをサポートしています。リスト型を使用した primeList の例は、例34.7「リストタイプの例」 に記載されています。

例34.7 リストタイプの例

<primeList>1 3 5 7 9 11 13<\primeList>

XML Schema リストタイプは通常 Java List<T> オブジェクトにマッピングされます。このパターンの唯一のバリエーションは、メッセージ部分が XML スキーマリストタイプのインスタンスに直接マップされる場合です。

XML スキーマでのリストタイプの定義

XML スキーマのリスト型は単純型で、simpleType 要素を使用して定義されます。リストタイプを定義するために使用される最も一般的な構文を 例34.8「XML スキーマリストタイプの構文」 に示します。

例34.8 XML スキーマリストタイプの構文

<simpleType name="listType">
  <list itemType="atomicType">
    <facet value="value" />
    <facet value="value" />
    ...
  </list>
</simpleType>

atomType に指定された値は、リスト内の要素のタイプを定義します。指定できるのは、xsd:int または xsd:string などの組み込み XML スキーマアトミック型のいずれか、またはリストではないユーザー定義の単純型だけです。

リストタイプにリストされている要素のタイプを定義することに加えて、ファセットを使用してリストタイプのプロパティーをさらに制約することもできます。表34.3「リストタイプファセット」 リストタイプで使用されるファセットを示します。

表34.3 リストタイプファセット

ファセット結果

長さ

リストタイプのインスタンスの要素数を定義します。

minLength

リストタイプのインスタンスで許可される要素の最小数を定義します。

maxLength

リストタイプのインスタンスで許可される要素の最大数を定義します。

enumeration

リストタイプのインスタンスの要素の許容値を定義します。

pattern

リストタイプのインスタンスの要素の字句形式を定義します。パターンは正規表現を使用して定義されます。

たとえば、例34.7「リストタイプの例」 に示される simpleList 要素の定義を、例34.9「リストタイプの定義」 に示します。

例34.9 リストタイプの定義

<simpleType name="primeListType">
  <list itemType="int"/>
</simpleType>
<element name="primeList" type="primeListType"/>

例34.8「XML スキーマリストタイプの構文」 に示す構文に加えて 例34.10「リストタイプの代替構文」 に示すあまり一般的でない構文を使用してリストタイプを定義することもできます。

例34.10 リストタイプの代替構文

<simpleType name="listType">
  <list>
    <simpleType>
      <restriction base="atomicType">
        <facet value="value"/>
        <facet value="value"/>
        ...
      </restriction>
    </simpleType>
  </list>
  </simpleType>

リストタイプ要素の Java へのマッピング

要素がリストタイプとして定義されている場合、リストタイプはコレクションプロパティーにマップされます。collection プロパティーは Java List<T> オブジェクトです。List<T> が使用するテンプレートクラスは、リストのベースタイプからマッピングされたラッパークラスです。たとえば、例34.9「リストタイプの定義」 で定義されたリストタイプは List<Integer> にマッピングされます。

ラッパータイプマッピングの詳細については、「ラッパークラス」 を参照してください。

リストタイプパラメーターの Java へのマッピング

メッセージ部分がリストタイプとして定義されている場合や、リストタイプの要素にマップされる場合、作成されるメソッドパラメーターは List<T> オブジェクトではなくアレイにマッピングされます。配列の基本型は、リスト型の基本クラスのラッパークラスです。

たとえば、例34.11「リストタイプのメッセージ部分を持つ WSDL」 の WSDL フラグメントは結果は、例34.12「リスト型パラメーターを使用した Java メソッド」 に示すメソッドシグネチャーになります。

例34.11 リストタイプのメッセージ部分を持つ WSDL

<definitions ...>
  ...
  <types ...>
    <schema ... >
      <simpleType name="primeListType">
        <list itemType="int"/>
      </simpleType>
      <element name="primeList" type="primeListType"/>
    </schemas>
  </types>
  <message name="numRequest"> <part name="inputData" element="xsd1:primeList" /> </message>
  <message name="numResponse">;
    <part name="outputData" type="xsd:int">
  ...
  <portType name="numberService">
    <operation name="primeProcessor">
      <input name="numRequest" message="tns:numRequest" />
      <output name="numResponse" message="tns:numResponse" />
    </operation>
    ...
  </portType>
  ...
</definitions>

例34.12 リスト型パラメーターを使用した Java メソッド

public interface NumberService {

    @XmlList
    @WebResult(name = "outputData", targetNamespace = "", partName = "outputData")
    @WebMethod
    public int primeProcessor(
        @WebParam(partName = "inputData", name = "primeList", targetNamespace = "...") java.lang.Integer[] inputData
    );
}