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 给出的值定义了列表中的元素类型。它只能是 XML 架构原子类型(如 xsd:intxsd:string )中构建的其中一个,也可以是不是列表的用户定义的简单类型。

除了定义列表类型中列出的元素类型外,您还可以使用 facets 来进一步限制列表类型的属性。表 34.3 “列出类型 Facets” 显示列表类型使用的 facets。

表 34.3. 列出类型 Facets

facet效果

length

定义列表类型的实例中的元素数量。

minLength

定义列表类型中允许的最小元素数量。

maxLength

定义列表类型的实例允许的最大元素数。

枚举

定义列表类型的实例的允许值。

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> 使用的模板类是从列表的基本类型映射的 wrapper 类。例如: 例 34.9 “列表类型的定义” 中定义的列表类型映射到 List<Integer>

有关 wrapper 类型映射的详情请参考 “打包程序类”一节

将列表类型参数映射到 Java

当消息部分定义为列表类型时,或映射到列表类型的元素时,生成的方法参数会被映射到数组而不是 List<T&gt; 对象。阵列的基本类型是列表类型的基本类的 wrapper 类。

例如,例 34.11 “具有列表类型 Message 部分的 WSDL” 中的 WSDL 片段生成方法签名 例 34.12 “带有 List Type Parameter 的 Java 方法”

例 34.11. 具有列表类型 Message 部分的 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. 带有 List Type Parameter 的 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
    );
}