Menu Close

34.4. リスト

概要

XML スキーマは、スペースで区切られた単純型の一覧であるデータ型を定義するメカニズムをサポートします。リスト型を使用する要素 primeList の例を、例34.7「リスト型の例」に示します。

例34.7 リスト型の例

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

XML スキーマのリスト型は、通常 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>

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

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

表34.3 リスト型のファセット

ファセット効果

length

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

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 へのリスト型要素のマッピング

要素がリスト型として定義されると、リスト型はコレクションプロパティーにマッピングされます。コレクションプロパティーは 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
    );
}