Связывание вложенных элементов в стандартном JAXB2 POJO

У меня есть следующая структура модели документа.

<rootNode>
  <node1>someValue</node1>
  <node2>someValue</node2>
  <groupOfNodes>
     <groupNode>
        <node3>someValue</node3>
        <node4>someValue</node4>
     </groupNode>
     <groupNode>
        <node3>someValue</node3>
        <node4>someValue</node4>
     </groupNode>
     <groupNode>
        <node3>someValue</node3>
        <node4>someValue</node4>
     </groupNode>
  </groupOfNodes>
</rootNode>

Я понял, как сопоставить node1 и node2 с аннотированным POJO, и они отлично работают. Однако я немного застрял в том, как связать вложенные узлы в groupOfNodes со списком groupNodes. Это то, что у меня есть до сих пор. Я просмотрел список доступных аннотаций в java-документах и ​​обнаружил, что @XmlList и @XmlElementWrapper могут быть наиболее близкими к тому, что мне нужно, но я не уверен, как их использовать в этом контексте. Когда я ставлю @XmlElementWrapper, я получаю null в groupNodesList. Когда я помещаю @XmlList, я получаю исключение, говорящее, что GroupNode — это сложный тип, который нужно поместить под @XmlList.

@XmlRootElement(name="rootNode")
@XmlAccessorType(XmlAccessType.FIELD)
public class MyNodes {
      @XmlElement(name="node1", required=false)
    private String node1;
    @XmlElement(name="node2", required=false)
    private String node2;   
     //tried this for the nested nodes but groupNodesList is always empty
       @XmlElementWrapper
  @XmlElement(name="groupOfNodes", required=false)
  private List<GroupNode> groupNodesList;
       //getters setters  

} 


   @XmlRootElement
   @XmlAccessorType(XmlAccessType.FIELD)
    public class GroupNode {
       @XmlElement(name="node3", required=false)
        private String node3;
        @XmlElement(name="node4", required=false)
        private String node4;             
         //getters setters  
    } 

Должен ли я вместо этого использовать XPath? Если возможно, я хотел бы увидеть пример кода с использованием стандартного JAXB2. В противном случае некоторые подсказки тоже были бы замечательными.

Я ценю это!


person user377067    schedule 29.03.2011    source источник


Ответы (1)


Вот что вам нужно:

@XmlElementWrapper(name="groupOfNodes")
@XmlElement(name="groupNode")   
private List<GroupNode> groupNodesList;

Для получения дополнительной информации о JAXB и коллекциях см.:

person bdoughan    schedule 29.03.2011
comment
Здравствуйте, Блейз. Пожалуйста, взгляните на этот stackoverflow.com/questions/41875849/. у меня похожая проблема не могу найти решение - person Jesse; 31.01.2017