【问题标题】:JAXB serializing array with wrong name名称错误的 JAXB 序列化数组
【发布时间】: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 {

我尝试了什么:

  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>
    

这些都没有效果。

【问题讨论】:

  • 可能会显示一个更完整的架构,包括元素的定义:(您刚刚显示了类型def),以及像elementFormDefault这样的级别属性。

标签: java xml xsd jaxb jaxb2


【解决方案1】:

在 PricingServicesGroupOwner 类中,对元素 ArrayOfServicePreferenceOwner 使用 @XmlElement(name = "servicePreferences")。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    相关资源
    最近更新 更多