2.5.2. 定义数组

概述

Apache CXF 支持两种方法来定义合同中的数组。第一种类型使用单个元素定义复杂类型,其 maxOccurs 属性的值大于一。第二种方法是使用 SOAP 阵列。SOAP 阵列提供添加的功能,例如可轻松定义多维数组和传输稀疏填充阵列。

复杂的类型数组

复杂的类型数组是一系列复杂类型的特殊情况。您只需通过单个元素定义复杂类型,并为 maxOccurs 属性指定一个值。例如:要定义一组二十个浮动点号,您可以使用类似 例 2.9 “复杂类型数组” 中显示的复杂类型。

例 2.9. 复杂类型数组

<complexType name="personalInfo">
  <element name="averages" type="xsd:float" maxOccurs="20"/>
</complexType>

您还可以为 minOccurs 属性指定一个值。

SOAP 阵列

SOAP 阵列通过利用 wsdl:arrayType 元素从 SOAP-ENC:Array 基础类型分离来定义。其语法显示在 例 2.10 “使用 wsdl:arrayType 进行 SOAP 数组派生的语法” 中。确保 定义 元素声明 xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"

例 2.10. 使用 wsdl:arrayType 进行 SOAP 数组派生的语法

<complexType name="TypeName">
  <complexContent>
    <restriction base="SOAP-ENC:Array">
      <attribute ref="SOAP-ENC:arrayType"
                 wsdl:arrayType="ElementType<ArrayBounds>"/>
    </restriction>
  </complexContent>
</complexType>

使用这个语法,TypeName 指定新定义的数组类型的名称。ElementType 指定阵列中的元素类型。ArrayBounds 指定阵列中的维度数。要指定单一维度数组,请使用 []; 指定双维数组,使用 [][][,]

例如,SOAP Array、SOAPStrings (如 例 2.11 “SOAP 阵列的定义” 所示)定义了一维字符串数组。wsdl:arrayType 属性指定数组元素的类型、xsd:string 和 dissions 的数量,带有 [] 意味着一个维度。

例 2.11. SOAP 阵列的定义

<complexType name="SOAPStrings">
  <complexContent>
    <restriction base="SOAP-ENC:Array">
      <attribute ref="SOAP-ENC:arrayType"
                 wsdl:arrayType="xsd:string[]"/>
    </restriction>
  </complexContent>
</complexType>

您还可以使用一个简单的元素描述 SOAP Array,如 SOAP 1.1 规格中所述。其语法显示在 例 2.12 “使用元素来派生 SOAP 阵列的语法” 中。

例 2.12. 使用元素来派生 SOAP 阵列的语法

<complexType name="TypeName">
  <complexContent>
    <restriction base="SOAP-ENC:Array">
      <sequence>
        <element name="ElementName" type="ElementType"
                 maxOccurs="unbounded"/>
      </sequence>
    </restriction>
  </complexContent>
</complexType>

使用这种语法时,元素的 maxOccurs 属性必须始终设置为 未绑定