在标准 JAXB2 POJO 中绑定嵌套元素

发布于 2024-10-28 05:32:58 字数 1857 浏览 9 评论 0原文

我有以下文档模型结构。

<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 时,我在 groupNodesList 中得到 null。当我放置 @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 的代码示例。否则一些提示也很棒。

我很感激!

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!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小糖芽 2024-11-04 05:32:58

以下是您所需要的:

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

有关 JAXB 和集合的更多信息,请参阅:

The following is what you need:

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

For more information on JAXB and collections see:

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文