Я пытаюсь выяснить, как аннотировать переменную класса, чтобы она могла содержать не более одного элемента базового типа, но конкретный тип может быть одним из трех разных классов. Вот пример, который, я надеюсь, должен объяснить, чего я пытаюсь достичь.
public class A extends Baseclass {}
public class B extends Baseclass {}
public class C extends Baseclass {}
public MyClass {
@XmlElements({
@XmlElement(name="name1",type="A.class"),
@XmlElement(name="name2",type="B.class"),
@XmlElement(name="name3",type="C.class")
})
private Baseclass xyz;
...
}
Эта конструкция позволяет xml содержать несколько элементов с именами "name1", "name2" или "name3". JAXB, очевидно, просто берет последний проанализированный элемент и использует его в качестве значения для "xyz".
Однако я хочу, чтобы JAXB разрешил только один элемент типа A, B или C с "name1", "name2" или "name3" соответственно.
XML выглядит так:
<myElement>
<name1></name1>
<name1></name1>
<name2></name2>
</myElement>
В этом случае элемент name2 будет присвоен переменной xyz.
Но я хочу, чтобы JAXB возвращал ошибку, если используется вышеупомянутая конструкция xml.
Я хочу разрешить только
<myElement>
<name1></name1>
</myElement>
но не
<myElement>
<name1></name1>
<name1></name1>
<name2></name2>
</myElement>
Javadoc для @XmlElements утверждает, что он предназначен для списков, что, по-видимому, является причиной такого поведения.
Итак, мой вопрос:
Как мне аннотировать "xyz", чтобы получить желаемое поведение? @XmlAdapter или что-то?