MOXy BeanValidation gives me the ability to add validation to my JAXB classes.
Using MOXy\'s \"Bean Validation Plugin\" I can have Bean Validation in generated JAX
I think it is there. MOXy uses its own SchemaGen implementation for the process of generating XSD files from Java classes. SchemaGen was extended to automatically generate XSD Restrictions and Facets based on BV annotations found on Java classes. Since the schema generation process takes place upon creation of JAXBContext, the BV enhancement feature can be turned on/off by setting the following property (found in JAXBContextProperties) on JAXBContext:
/**
* Property for disabling/enabling generation of XML Facets during schemagen.
* The mapped value must be of type Boolean.
* If it's true, then facets will be generated, based on the BV annotations.
* If false, the BV annotations processing will be skipped during schemagen
* and no facets will be generated.
*
* @since 2.6
*/
public static final String GENERATE_FACETS = "eclipselink.generate.facets";
SchemaGen recognizes annotations provided by the BV API, including @Pattern.List. If SchemaGen encounters a field annotated with both @NotNull and @XmlElement(nillable = true), it will raise the BeanValidationException.notNullAndNillable().
Sample:
Map props = new HashMap( );
props.put("eclipselink.beanvalidation.facets", true);
JAXBContext jc = JAXBContext.newInstance(classes, properties);
SchemaOutputResolver sor = new MSOR();
jc.generateSchema(sor);
You could also look to xjc plugin https://github.com/krasa/krasa-jaxb-tools
By documentation it support XJsr303Annotations
and can generate:
@Valid
annotation for all complex types, can be further restricted to generate only for types from defined schema: -XJsr303Annotations:targetNamespace=http://www.foo.com/bar
@NotNull
annotation for objects that has a MinOccur
value >= 1 or for attributes with required use@Size
for lists that have minOccurs > 1
@Size
if there is a maxLength
or minLength
or length restriction@DecimalMax
for maxInclusive
restriction@DecimalMin
for minInclusive
restriction@DecimalMax
for maxExclusive
restriction, enable new parameter (inclusive=false)
with: -XJsr303Annotations:JSR_349=true
@DecimalMin
for minExclusive
restriction, enable new parameter (inclusive=false)
with: -XJsr303Annotations:JSR_349=true
@Digits
if there is a totalDigits
or fractionDigits
restriction.@Pattern
if there is a Pattern
restrictionIf you wonder how to use XJC plugins in your build environment (ant
, maven
, gradle
) I may recomment look at examples of another plugin: immutable-xjc
So I hope it helps.
Filed a request for enhancement to process @XMLAttribute
fields: Bugs Page
The reason you need to use v2.7 is that in some unusual call trees for schema generation, the enable facets property value is not propagated down the call tree. It was fixed on May 5th. Asked for backport to EL v2.6 now.