【发布时间】:2016-08-16 19:23:46
【问题描述】:
我有一个像这样的 xsd 架构定义(定义已提供给我并由 wsdl 使用,因此我试图避免更改架构):
...
<xs:complexType name="PricingServicesGroupOwner">
<xs:sequence>
...
<xs:element minOccurs="0" name="servicePreferences" nillable="true"
type="tns:ArrayOfServicePreferenceOwner"/>
...
</xs:sequence>
</xs:complexType>
<xs:complexType name="ArrayOfServicePreferenceOwner">
<xs:sequence>
<xs:element minOccurs="0" maxOccurs="unbounded" name="ServicePreferenceOwner" nillable="true"
type="tns:ServicePreferenceOwner"/>
</xs:sequence>
</xs:complexType>
<xs:element name="ArrayOfServicePreferenceOwner" nillable="true" type="tns:ArrayOfServicePreferenceOwner"/>
...
问题出在“ArrayOfServicePreferenceOwner”类型的内部元素中,它应该被命名为“servicePreferences”,所以我希望在序列化的 xml 元素中看到该名称,但是当对象被序列化时,我得到了这个:
...
<ns3:PricingServicesGroupOwner>
...
<ns3:ArrayOfServicePreferenceOwner>
<ns4:ServicePreferenceOwner>
...
</ns3:ArrayOfServicePreferenceOwner>
...
</ns3:PricingServicesGroupOwner>
...
预期是这样的:
...
<ns3:PricingServicesGroupOwner>
...
<ns3:servicePreferences>
<ns4:ServicePreferenceOwner>
...
</ns3:servicePreferences>
...
</ns3:PricingServicesGroupOwner>
...
JAXB 类有这个带有注释的名称定义:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfServicePreferenceOwner", namespace = "http://myschema...", ...
public class ArrayOfServicePreferenceOwner {
我尝试了什么:
-
更改注解中的名称属性:
@XmlType(name ="servicePreferences",... -
使用 jaxb 绑定:
<jaxb:bindings schemaLocation="serviceSchema.xsd"> <jaxb:bindings node="//xs:element[@name='ArrayOfServicePreferenceOwner']"> <jaxb:property name="servicePreferences"/> </jaxb:bindings> <jaxb:bindings node="//xs:complexType[@name='ArrayOfServicePreferenceOwner']"> <jaxb:property name="servicePreferences"/> </jaxb:bindings> </jaxb:bindings>
这些都没有效果。
【问题讨论】:
-
可能会显示一个更完整的架构,包括元素的定义:
(您刚刚显示了类型def),以及像elementFormDefault这样的 级别属性。