Группировка свойств с использованием аннотаций 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;
}
Для дополнительной информации: