JAXB中的封送数组

时间:2011-09-07 18:20:22

标签: xml arrays jaxb marshalling

我没有问题来编组Job对象,但是当我尝试编写一个Job数组时,我得到了一个糟糕的XML。好像我需要创建一个类似的包装元素。我不知道如何,我会喜欢这方面的帮助。

MyClass的:

@XmlRootElement(name = "job")
class Job{
  private String username;
  private Calendar previousFireTime;
}

用法:

Job[] jobs = service.getJobs( ... );
    StringWriter sw = new StringWriter();
    for (int i=0 ; i<jobs.length ; i++)
        RESTUtils.getMarshaller(Job.class).marshal(jobs[i], sw);

结果:这是一个无效的XML文件

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<job>
    <nextFireTime>2011-09-06T18:45:00-07:00</nextFireTime>
    <username>me</username>
</job>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<job>
    <nextFireTime>2011-09-06T18:48:00-07:00</nextFireTime>
    <username>me</username>
</job>

1 个答案:

答案 0 :(得分:3)

即使JAXB不会生成复数为&lt;?xml version =“1.0”encoding =“UTF-8”standalone =“yes”的XML文件?&gt;你仍然会有几个无效的job元素,因为只允许一个根元素。

我看到两种解决方案。

  1. 首选解决方案:创建一个包含作业数组的JAXB bean作业(新的根元素),然后作为奖励,您可以轻松地解析XML。
  2. 追加&lt;?xml ...&gt; &LT;工作&GT;循环之前的StringWriter和&lt; / jobs&gt;在循环之后并过滤掉&lt;?xml行的其余部分。