使用JAXB注释对属性进行分组

时间:2011-07-05 18:11:13

标签: java xml jaxb marshalling oxm

我有一个类Product,其中包含以下属性:namedateCreatedcreatedByUserdateModifiedmodifiedByUser,以及我使用JAXB编组。我希望得到这样的输出:

<product>
    <name>...</name>
    <auditInfo>
        <dateCreated>...</dateCreated>
        <createdByUser>...</createdByUser>
        <dateModified>...</dateModified>
        <modifiedByUser>...</modifiedByUser>
    </auditInfo>
</product>

但理想情况下,我希望避免围绕这些属性创建单独的AuditInfo包装类。

有没有办法用JAXB注释做到这一点?我查看了@XmlElementWrapper但这只是收藏品。

2 个答案:

答案 0 :(得分:3)

注意:我是EclipseLink JAXB (MOXy)负责人,也是JAXB 2.X(JSR-222)专家组的成员。

您可以在此用例中使用MOXy的@XmlPath扩展名:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Product {

    private String name;

    @XmlPath("auditInfo/dateCreated/text()")
    private Date dateCreated;

    @XmlPath("auditInfo/createdByUser/text()")
    private String createdByUser;
}

更多信息:

答案 1 :(得分:2)

不,我不相信。中介课是必要的。

您可以通过AuditInfoProduct作为嵌套内部类放在Product中,并将getter和setter方法添加到AuditInfo来设置{{1}上的字段。 }}。 Product的客户永远不会知道。

public class Product {
   private @XmlElement AuditInfo auditInfo = new AuditInfo();

   public void setDateCreated(...) {
      auditInfo.dateCreated = ...
   }

   public static class AuditInfo {
      private @XmlElement String dateCreated;
   }
}