Маршалинг массивов в JAXB - PullRequest
       19

Маршалинг массивов в JAXB

3 голосов
/ 07 сентября 2011

У меня нет проблем с маршалированием объектов 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 Ответ

3 голосов
/ 07 сентября 2011

Даже если JAXB не будет создавать XML-файл с множественным числом <? Xml version = "1.0" encoding = "UTF-8" standalone = "yes"?>, У вас все равно будет несколько элементов задания, которые не будут действительными так как разрешен только один корневой элемент.

Я вижу два решения.

  1. Предпочтительное решение: создайте задания JAXB-компонента (ваш новый корневой элемент), который содержит массив заданий, а в качестве бонуса вы можете легко разархивировать XML.
  2. Добавьте <? Xml ...> к StringWriter до цикла и после цикла и отфильтруйте остальные строки <? Xml. </li>
...