Документация для required говорит:
Если
required()
true
, то свойство Javabean отображается на элемент XML-схемы с помощьюminOccurs="1"
.maxOccurs
является"1"
для однозначного свойство и"unbounded"
для многозначного свойства.Если
required()
-false
, то свойство Javabean отображается в XML Объявление элемента схемы с помощьюminOccurs="0"
.maxOccurs
является"1"
для однозначное свойство и"unbounded"
для многозначного свойства.
Документация для nillable говорит:
Если
nillable()
-true
, тогда свойство JavaBean отображается в XML Объявление схемыnillable
.
<ч/" > Код для xs:complexType
:
public class WSData {
//...
@XmlElement(required = true, nillable = false)
public void setMonth(XmlMonthType month) {
this.month = month;
}
public void setUserLogin(String userLogin) {
this.userLogin = userLogin;
}
}
Код для xs:simpleType
:
@XmlType
@XmlEnum(Integer.class)
public enum XmlMonthType {
@XmlEnumValue("1")
JANUARY,
@XmlEnumValue("2")
FEBRUARY,
@XmlEnumValue("3")
MARCH,
/* ... months 4 ~9 ... */
@XmlEnumValue("10")
OCTOBER,
@XmlEnumValue("11")
NOVEMBER,
@XmlEnumValue("12")
DECEMBER;
}
Сгенерированная схема XML:
<xs:complexType name="wsData">
<xs:sequence>
<xs:element name="month" type="xs:string"/>
<xs:element minOccurs="0" name="userLogin" type="xs:string"/>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="xmlMonthType">
<xs:restriction base="xs:int">
<xs:enumeration value="1"/>
<xs:enumeration value="2"/>
<xs:enumeration value="3"/>
<!-- ... months 4 ~9 ... -->
<xs:enumeration value="10"/>
<xs:enumeration value="11"/>
<xs:enumeration value="12"/>
</xs:restriction>
</xs:simpleType>
<ч/" > Факты:
- Значение по умолчанию для minOccurs равно 1. Таким образом, требуется месяц (должен существовать);
- В месяце есть ограничение . Таким образом, месяц может иметь только значение, определенное одним из 12 определенных перечислений;
- Значение по умолчанию для nillable - false. Таким образом, месяц не может иметь пустые значения;
- XML-схема генерируется правильно.
Проблемы:
- Принимает абсент месяца (не должен существовать);
- Принимает любые значения за месяц, например 13 (кроме случаев, когда он не обрабатывается Integer);
- Принимает пустые значения;
Я не ожидал этих проблем, я что-то упустил?
Если это поведение является правильным, в чем цель required, nillable и xs: restriction