Подтвердить что ты не робот

Может/должен ли я перечислять унаследованные свойства для JAXB, нанесенного на карту bean в аннотации "propOrder"?

У меня есть куча аннотированных классов JAXB, у которых есть общее поле, поэтому я переместил это поле в суперкласс, например этот

public class Base {
    protected SomeType commonField;
}

@XmlRootElement(name = "foo") @XmlType(propOrder = { "commonField", "fooField" })
public class Foo extends Base {
    private SomeOtherType fooField;
}

@XmlRootElement(name = "bar") @XmlType(propOrder = { "commonField", "barField" })
public class Bar extends Base {
    private SomeOtherType barField;
}

Теперь, когда я сортирую один из Foo или Bar, я получаю IllegalAnnotationException, жалующийся на commonField, который указан в propOrder, но не присутствует в классе. Удаление из аннотации propOrder все работает нормально, но я должен был отобразить все отображаемые поля. Что мне не хватает?

4b9b3361

Ответ 1

Поля/свойства унаследованного класса всегда будут отображаться перед полями/свойствами дочерних классов. Это означает, что по умолчанию вы не можете указать их в propOrder для дочернего типа. Однако, если вы помечаете родительский класс как @XmlTransient, поля/свойства будут считаться принадлежащими дочерним классам и могут быть включены в propOrder.