Можно / нужно ли перечислить унаследованные свойства для сопоставленного компонента JAXB в аннотации propOrder? - PullRequest
14 голосов
/ 22 июля 2011

У меня есть несколько аннотированных классов 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 все работает нормально, но я подумал, что должен был перечислить все сопоставленные поля. Чего мне не хватает?

1 Ответ

26 голосов
/ 22 июля 2011

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

...