JAXB @XmlElements имеет значение minOccurs = 1
Итак, я хочу, чтобы список был аннотирован с помощью @XmlElements, как показано ниже.
@XmlElements(
{
@XmlElement(name = "Apple", type = Apple.class),
@XmlElement(name = "Orange", type = Orange.class),
@XmlElement(name = "Mango", type = Mango.class)
}
)
public List<Fruit> getEntries() {
return fruitList;
}
Мне интересно, есть ли способ заставить список содержать хотя бы 1 элемент, потому что прямо сейчас xsd выглядит как
<xs:complexType name="fruitList">
<xs:sequence>
<xs:choice minOccurs="0" maxOccurs="unbounded">
<xs:element name="Apple" type="tns:apple"/>
<xs:element name="Orange" type="tns:orange"/>
<xs:element name="Mango" type="tns:mango"/>
</xs:choice>
</xs:sequence>
</xs:complexType>
Ответы
Ответ 1
Предполагая, что Apple, Orange и Mango являются подклассами Fruit, вам может понадобиться аннотировать свойство entries
с помощью @XmlElementRef
, которое соответствует группам подстановки в XML-схеме, а не @XmlElements
, что соответствует понятию выбора.
@XmlElementRef
public List<Fruit> getEntries() {
return fruitList;
}
Это предполагает, что классы Apple, Orange и Mango расширяют класс Fruit и аннотируются с помощью @XmlRootElement
@XmlRootElement
public class Apple extends Fruit {
...
}
Дополнительная информация
Ответ 2
Я предлагаю проверить:
@XmlElements(
{
@XmlElement(name = "Apple", type = Apple.class, required = true),
@XmlElement(name = "Orange", type = Orange.class, required = true),
@XmlElement(name = "Mango", type = Mango.class, required = true)
}
)