Изменяемая структура XML в JAXB?

Я думал о создании Java-генератора файлов XML, которые затем загружаются другой программой Java (я не могу изменить код там). Очевидным ответом был JAXB, однако я наткнулся на проблему.

Я хочу, чтобы XML был немного более настраиваемым:

<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>
<HeadTag>
  <firsElement>
    <att1/>
    <att2/>
    <att3/>
  </firsElement>
</HeadTag>
<HeadTag>
  <secondElement>
    <att3/>
    <att4/>
    <att5/>
    <att6/>
  </secondElement>
</HeadTag>

Все три XML-файла будут допустимыми выходными данными генератора. Я создал класс Java для fistElement, secondElement и так далее (их много), но я не могу понять, как добавить их все в один элемент HeadTag.

У меня много элементов, более 500, поэтому размещать их в качестве полей в классе довольно некрасиво.


person everyonecancode    schedule 10.02.2016    source источник


Ответы (1)


Если вы можете позволить своим классам элементов расширять абстрактный класс, вы можете попробовать следующее:

@XmlAccessorType(XmlAccessType.FIELD)
public abstract class Element{};

@XmlAccessorType(XmlAccessType.FIELD)
public class FirstElement extends Element{ ... };

@XmlAccessorType(XmlAccessType.FIELD)
public class SecondElement extends Element{ ... };

//Other elements classes

@XmlRootEntity
@XmlAccessorType(XmlAccessType.FIELD)
public class HeadTag{
    @XmlElements({
        @XmlElement(name="firstElement",type=FirstElement.class),
        @XmlElement(name="secondElement",type=SecondElement.class),
        //One for each of your classes
    })
    private List<Element> elements;
}

У вас по-прежнему будет много аннотаций @XmlElement, но в вашем классе не будет более 500 полей.

person Dimpre Jean-Sébastien    schedule 14.06.2016