AXIS 2中WSDL字符串数组类型的定义问题咨询
Axis2 WSDL中字符串数组的正确定义方式
你原来在Axis1里用的直接在元素上设置maxOccurs="unbounded"的写法,在Axis2的wsdl2java工具下会因为规范兼容性问题无法生成正确的数组类型。下面是两种适配Axis2的标准写法:
方式一:使用简单列表类型
适合不需要额外属性的纯字符串数组,直接通过<xs:list>定义:
<!-- 直接定义列表元素 --> <xs:element name="names" type="xs:string" nillable="true"/> <!-- 或者先定义可复用的列表类型 --> <xs:simpleType name="StringList"> <xs:list itemType="xs:string"/> </xs:simpleType> <xs:element name="names" type="StringList" nillable="true"/>
方式二:使用嵌套复杂类型(推荐)
这种写法更符合SOAP规范,也能更好地兼容Axis2的代码生成工具,支持空值和可选出现:
<xs:complexType name="NameArray"> <xs:sequence> <xs:element name="name" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/> </xs:sequence> </xs:complexType> <xs:element name="names" type="NameArray" nillable="true"/>
为什么原来的写法不行?
Axis1对WSDL的解析比较宽松,允许直接在根元素上重复;但Axis2严格遵循JAXB和WS-I基本规范,这种松散的重复元素会被解析成多个独立的name参数,而非数组对象,导致生成的服务类无法适配数组逻辑。
内容的提问来源于stack exchange,提问作者AXISDev
相关产品推荐
相关产品推荐

