【问题标题】:Converting Java Object to XML in the order of Schema xml按照 Schema xml 的顺序将 Java Object 转换为 XML
【发布时间】:2015-07-23 13:53:27
【问题描述】:

我有一个 java 对象

@XmlRootElement
public class Customer {

    private String name;
    private List<PhoneNumber> phoneNumbers = new ArrayList<PhoneNumber>();
    private String id;
    private Date startDate;
    private Date endDate;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    @XmlElement(name = "phone-number")
    public List<PhoneNumber> getPhoneNumbers() {
        return phoneNumbers;
    }
    public void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
        this.phoneNumbers = phoneNumbers;
    }
}

我想定义一个模式 xml (customer.xsd),它应该用于在生成 xml 时设置标签的顺序, 与对象成员顺序相比,生成的对象到 xml 的顺序应如下所示。

<customer>
    <startDate></startDate>
    <endDate></endDate>
    <name></name>
    <id></id>
    <phoneNumbers></phoneNumbers> 
</customer>

Marshalling 和 Unmarshalling 代码都应该基于相同的 schema xml。

有人可以帮助我如何创建此架构以及如何实现我的排序吗??

【问题讨论】:

  • 您尝试过编写 XSD 吗?你在哪里卡住了?
  • 我尝试了 xsd,我认为现在生成了 xml 的方法,但是标签按照设置为 VO 的字段顺序排列,而不是按照 xsd 标签顺序排列。还有一个与某些字段顺序相关的链接异常。我还有什么需要做的吗??

标签: java xml xsd jaxb


【解决方案1】:

你有两个选择:

  • 在Java对象中你可以定义@XmlType(propOrder={&lt;order of the elements&gt;}) 更多详情请参考here
  • 第二种方法(使用 xsd),您可以像这样定义 xsd:

<xsd:element name="Customer">
  <xsd:complexType >
       <xsd:sequence>
          <xsd:element name="name" type="xsd:string" />
          <xsd:element name="id" type="xsd:string" />
          <xsd:element name="startDate" type="xsd:string" />
          <xsd:element name="endDate" type="xsd:int" />
          <xsd:element name="phoneNumbers" type="xsd:string" minOccurs="0" maxOccurs="unbounded" />
       </xsd:sequence>
  </xsd:complexType>
</xsd:element>

在 XSD 中,您可以对 &lt;xsd:sequence&gt; 中的元素进行排序 请注意,我没有在这个例子中尝试过这个 XSD,我添加了它供你参考。

【讨论】:

  • 尝试使用 xsd 方法。 object 和 xsd 中的成员顺序不同。填充对象并尝试编组。得到一些字段顺序错误,如下所示。发现以元素“地址”开头的无效内容。应为“{gender}”之一。
  • 能否请您发布您在 xsd 文件中遇到的确切错误?
  • w3.org/2001/XMLSchema">
  • 错误:线程“main”中的异常 javax.xml.bind.MarshalException - 带有链接异常:[org.xml.sax.SAXParseException;行号:0;列号:0; cvc-complex-type.2.4.a:发现以元素“地址”开头的无效内容。 '{gender}' 之一是预期的。] 在 com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:311) 在 com.sun.xml.internal.bind.v2.runtime .MarshallerImpl.marshal(MarshallerImpl.java:236) 在 javax.xml.bind.helpers.AbstractMarshallerImpl.marshal(AbstractMarshallerImpl.java:95) 在 com.ndfs.ncp.jax.JaxMarshaller.main(JaxMarshaller.java:33)
  • 刚刚发现生成的xml是按字母顺序生成的,有没有办法抑制这个,得到原始xsd格式的xml??
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
相关资源
最近更新 更多