2010-04-19 12 views
25

Tenemos esta JAXB anotación:JAXB requiere = true no parece requerir

@XmlElement(name = "Strategy", required = true) 
protected List<Strategy> strategy; 

Si no hay Strategy elementos presentes, sin excepción se produce .. ¿por qué es esto? ¿No deberíamos obtener una excepción?

Respuesta

32

La implementación de referencia de JAXB no utiliza este atributo para la validación, es puramente para fines de documentación.

Si necesita validar los documentos, debe definir un Esquema XML e insertarlo en Marshaller o Unmarshaller, usando SchemaFactory.

+0

ver [this] (http://stackoverflow.com/a/2696765/12604) para ver un ejemplo de carga del 'Schema' de su' JAXBContext' para usar en 'Marshaller' /' Unmarshaller'. –

+0

No diría que es puramente para documentación, también se usa para la generación de esquemas. Cuando genera un XSD a partir de sus clases de Java y tiene 'required = true', la declaración del elemento en el XSD se generará con' minOccurs = "1" '. Luego puede usar el XSD para validar XML. – Jesper

1

Además, puede utilizar los métodos beforeMarshal y afterUnmarshal para validar las entradas como en spec'da Marshaller y Unmarshaller.

El esquema bajo el cual se accede a estos métodos también le permitirá agregar una cláusula throws arbitraria a la declaración del método. Esto significa que al implementar estos métodos, puede usar javax.xml.bind.MarshalException y javax.xml.bind.UnmarshalException(o el tipo de Exception que desee) para señalar los errores de validación.

Cuestiones relacionadas