JAXB required=true doesn't seem to require

2019-01-17 10:40发布

问题:

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?

回答1:

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.



回答2:

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.



标签: java xml jaxb