【问题标题】:Unmarshalling nested collection via @XmlPath MOXy annotation通过 @XmlPath MOXy 注释解组嵌套集合
【发布时间】:2012-06-24 14:22:43
【问题描述】:

给定以下 XML 结构:

<root>
  <data>x</data>
  <details>
    <some_other_element>...</some_other_element>
    <collection>
      <element><a>1</a></element>
      <element><a>2</a></element>
      <element><a>3</a></element>
    <collection>
  </details>
</root>

我如何使用 MOXy 将其解组为一个基本平坦的 POJO?我尝试了这种方法(为简洁起见,省略了 getter 和 setter):

@XmlRootElement(name = "root")
class Root {
  @XmlElement
  private String data;

  @XmlElement
  @XmlPath("details/some_other_element")
  private String someOtherElement;

  @XmlPath("details")
  @XmlElementWrapper(name = "collection")
  @XmlElement(name = "element")
  private Collection<Element> elements;
}

class Element {
  @XmlElement
  private String a;
}

不幸的是,这只是向elements 集合添加了一个未初始化的对象。我想避免必须声明一个 Details 类(确实有效),因为这会破坏 &lt;details&gt; 以下元素的其他 @XmlPath 映射。

我已验证 MOXy 已实际加载(如 jaxb.properties 中声明的那样)。

有什么想法吗?

【问题讨论】:

    标签: java jaxb eclipselink moxy


    【解决方案1】:

    尝试将包装标签和元素添加到@XmlPath,而不是使用@XmlElementWrapper

    @XmlPath("details/collection/element")
    @XmlElement(name = "element")
    private Collection<Element> elements;
    

    我认为您甚至可以保留 @XmlElementWrapper 注释以防将来更改 jaxb 提供程序。


    以下是您的用例所需的最少注释:

    package forum11153599;
    
    import java.util.Collection;
    import javax.xml.bind.annotation.*;
    import org.eclipse.persistence.oxm.annotations.XmlPath;
    
    @XmlRootElement
    class Root {
        @XmlElement
        private String data;
    
        @XmlPath("details/some_other_element/text()")
        private String someOtherElement;
    
        @XmlPath("details/collection/element")
        private Collection<Element> elements;
    
    }
    

    【讨论】:

    • +1 - 我是 MOXy 负责人,您的回答是正确的。我希望你不介意我添加了一个 Root 类的示例。
    • 非常好,就像一个魅力(虽然我很确定我之前也尝试过这个变种;-))!
    猜你喜欢
    • 1970-01-01
    • 2021-08-23
    • 2011-08-22
    • 1970-01-01
    • 2020-09-19
    • 2012-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-06-18
    相关资源
    最近更新 更多