JAXB required=true doesn't seem to require
Asked Answered
A

2

32

We have this JAXB annotation:

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

If there are no Strategy elements present, no exception is thrown.. why is this? Shouldn't we get an exception?

Alamo answered 19/4, 2010 at 17:49 Comment(0)
S
39

The JAXB reference implementation doesn't use this attribute for validation, it's purely there for documentation purposes.

If you need to validate the documents, you need to define an XML Schema, and inject it into the Marshaller or Unmarshaller, using SchemaFactory.

Sylvia answered 19/4, 2010 at 17:52 Comment(2)
see this for an example of loading the Schema from your JAXBContext to use in the Marshaller/Unmarshaller.Izanagi
I wouldn't say it is purely for documenation - it's also used for schema generation. When you generate an XSD from your Java classes and you have required = true then the element declaration in the XSD will be generated with minOccurs="1". You can then use the XSD for validating XML.Tatyanatau
I
1

Additionally, you could use the beforeMarshal and afterUnmarshal methods to validate inputs as spec'd in Marshaller and Unmarshaller.

The scheme under which these methods are accessed will also allow you to add an arbitrary throws clause to the method declaration. This means that when implementing these methods, you can safely use javax.xml.bind.MarshalException and javax.xml.bind.UnmarshalException (or whatever sort of Exception you want) to signal validation errors.

Izanagi answered 24/1, 2013 at 21:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.