JAXB не позволяет отменить связывание определяется в родительских элементов в классе детей.
Чтобы достичь этого, я могу предложить использовать промежуточный класс, который должен содержать все, что на самом деле содержится в вашем классе A, но вы должны аннотировать его XmlTransient
и не указывать в нем никакого отображения.
Оба класса A
и класс B
должны расширять этот базовый класс, но теперь каждый может определить, как определить их привязку JAXB.
Вот пример, начинающийся с вашего кода.
Базовый класс
@XmlTransient
public class Base {
protected String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
A
класс может использовать поведение JAXB по умолчанию, если он подходит. Он создаст сопоставление с общедоступными полями и общедоступным getter/setter (поэтому наследуется от родительского класса).
По умолчанию, если @XmlAccessorType на упаковке отсутствует, то уровень аннотаций следующий пакет предполагается.
@XmlAccessorType (XmlAccessType.PUBLIC_MEMBER)
Класс
@XmlRootElement
public class A extends Base {
}
Если вы хотите, чтобы указать атрибут, как required
или использовать какие-либо особенности в отображении элементов, вы должны использовать явное связывание в классе A.
Но класс B
должен указать @XmlAccessorType(XmlAccessType.NONE)
, чтобы иметь полный контроль над полями для сериализации/десериализации из класса Base
.
B Класс
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class B extends Base {
@XmlElement
private String boundedStringSpecificToB;
}
Как имя будет _required_ для класса 'Ā', но не для класса' 'b' когда B' является подклассом' Ā'? – RudolphEst