Группировка свойств с использованием аннотаций JAXB

У меня есть класс Product со следующими свойствами: name, dateCreated, createdByUser, dateModified а также modifiedByUserи я использую JAXB сортировку. Я хотел бы иметь вывод, как это:

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

но в идеале я хотел бы избежать создания отдельного AuditInfo Обертка класса вокруг этих свойств.

Есть ли способ сделать это с аннотациями JAXB? я смотрел на @XmlElementWrapper но это только для коллекций.

2 ответа

Решение

Нет, я не верю в это. Промежуточный класс необходим.

Вы можете обойти это, имея AuditInfo как вложенный внутренний класс внутри Productи добавить методы получения и установки в Product которые устанавливают поля на AuditInfo, Клиенты Product никогда не нужно знать.

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

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

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

Примечание. Я являюсь лидером EclipseLink JAXB (MOXy) и являюсь членом группы экспертов JAXB 2.X ( JSR-222).

Вы можете использовать МОКСИ @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;
}

Для дополнительной информации:

Другие вопросы по тегам