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
属性必须始终设置为 未绑定
。