Good question. As far as I know, the required
attribute is generated by XJC when it finds a non-optional schema type, and I think it's also used by the schema generator. At runtime, though, it's not used for anything, serving no other purpose than a documentary annotation.
One thing you could consider is the JAXB runtime's callback options. In this case, you could just define a afterUnmarshal()
method on MyClass
which programmatically validates the state of the object, throwing an exception if it doesn't like it. See the above link for other options, including registering separate validator classes.
Having said that, validation against a schema really is the best way. If you don't have one, you should considering writing one. The schemagen tool can generate a schema from your object model, which you can then modify to add whatever constraints you like. Hopefully, schemagen
will generate mandatory schema elements from your required=true
class fields.