有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java JAXB序列化名称错误的数组

我有这样一个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"/>
...

问题出在类型为“ArrayOfServiceReferenceOwner”的内部元素中,该元素应命名为“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 {

我尝试的是:

  1. 更改批注中的“名称”属性:

    @XmlType(name ="servicePreferences",...
    
  2. 使用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>
    

这些都没有效果


共 (0) 个答案