的文档required说:minOccurs,nillable和restriction的用途是什么?
如果
required()
是true
,那么JavaBean属性被映射到XML模式元素 声明与。maxOccurs
是"1"
对于单值 财产和"unbounded"
为多值财产。如果
为 nillablerequired()
是false
,那么Javabean属性映射到XML 模式元素声明minOccurs="0"
。maxOccurs
为"1"
为 单值财产和"unbounded"
为多值财产。
文件说:
如果
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模式生成正确。
的问题:
- 它接受一个月的abcense(必须不存在);
- 它接受月份的任何值,如13(除非不能解析整数);
- 它接受空值;
我没有料到这些问题,我错过了什么?
如果该行为是正确的,什么是required目的,nillable和xs:restriction?
你的意思是的nillable用于定义是否可以为空值时,标签的存在;并且需要用于定义标签是否存在或不存在?在这种情况下,为什么它允许空标签以及为什么它根本不需要标签?我如何注释使minOccurs 1? – falsarella 2012-02-02 13:40:11
minOccurs默认为1。你原来的模式表示那个月是强制性的(标签存在而不是空的)。 – bcody 2012-02-02 14:32:09
那么为什么它接受月份的abcense或空值?它不会在响应中产生错误! – falsarella 2012-02-02 15:00:51