Documentación para required dice:¿Cuál es el propósito de minOccurs, nillable y restricción?
Si
required()
estrue
, entonces propiedad Javabean se asigna a un esquema XML elemento declaración con .maxOccurs
es"1"
para una sola propiedad con valor y"unbounded"
para una propiedad con varios valores.Si
required()
esfalse
, entonces la propiedad Javabean se asigna a XML declaración de elemento de esquema conminOccurs="0"
.maxOccurs
es"1"
para una propiedad de un solo valor y"unbounded"
para una propiedad de varios valores.
Documentación para nillable dice:
Si es
nillable()
true
, entonces la propiedad JavaBean se asigna a un esquema XMLnillable
declaración de elemento.
Código de
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;
}
}
Código de 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;
}
generada esquema 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>
Los hechos:
- El valor por defecto para minOcurrencias es 1. Por lo tanto, se requiere meses (debe existir);
- El mes tiene una restricción . Por lo tanto, mes solo puede tener un valor definido por una de las 12 enumeraciones definidas;
- El valor predeterminado para nillable es falso. Por lo tanto, mes no puede tener valores vacíos;
- El esquema XML se genera correctamente.
Los problemas:
- Es aceptar abcense del mes (no debe existir);
- Acepta cualquier valor para el mes, como 13 (excepto cuando no se puede analizar en Entero);
- Acepta valores vacíos;
No esperaba estos problemas, ¿me falta algo?
Si ese comportamiento es correcto, lo que es el propósito de required, nillable y xs:restriction?
¿Quiere decir que nillable se utiliza para definir si puede tener valores vacíos cuando existe la etiqueta; y eso requerido se usa para definir si la etiqueta debe existir o no? En este caso, ¿por qué está permitiendo etiquetas vacías y por qué no requiere tener esa etiqueta? ¿Cómo anoto para hacer minOccurs 1? – falsarella
minOccurs es 1 por defecto. Su esquema original dice que ese mes es obligatorio (la etiqueta existe y no está vacía). – bcody
¿Entonces por qué acepta abcense de mes o valor vacío? ¡No genera un error en la respuesta! – falsarella