3

I have the following document model structure.

<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>

I have figured out how to map node1 and node2 to an annotated POJO and they work perfectly. However, I am kind of stuck on how to bind the nested nodes in groupOfNodes to a List of groupNodes. This is what I have so far. I went through the available annotations list on the java docs and I found that @XmlList and @XmlElementWrapper may be the closest to what I am wanting but I am not sure how to use them in this context. When I put @XmlElementWrapper I get null in groupNodesList. When I put @XmlList I get an exception saying that GroupNode is a complex type to be put under @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  
    } 

Should I be using XPath instead? If possible I would like to see a code example using standard JAXB2. Otherwise some hints would be great too.

I appreciate it!

bdoughan
  • 147,609
  • 23
  • 300
  • 400
user377067
  • 275
  • 2
  • 6

1 Answers1

2

The following is what you need:

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

For more information on JAXB and collections see:

bdoughan
  • 147,609
  • 23
  • 300
  • 400
  • Hello Blaise, Please take a look at this http://stackoverflow.com/questions/41875849/how-to-utilize-jaxb-for-object-serialization-for-sub-elements-with-same-tag-name/41876211?noredirect=1#comment70978243_41876211. I have a simliar problem and I cant find a solution – JayC Jan 30 '17 at 22:10