2015-09-04 205 views
4

MOXy BeanValidation使我能够向我的JAXB类添加验证。从Java JAXB注释类生成的模式中生成XSD限制

使用MOXy的“Bean验证插件”我可以在生成的JAXB类中根据restrictions/facets预先存在架构中进行Bean验证。

不过是那里生成基于Bean验证架构restrictions/facets任何注解从JAXB注释的Java类?当做'模式第一'生成java时,XJC有一个方便的插件体系结构,但是有没有任何等价的'java优先'方法来增强生成的XSD的额外限制,甚至是添加XML注释?无论是在MOXy还是JAXB-RI?

MOXy在满足中间映射时非常灵活,可以在模式生成期间使用它吗?

jaxb-facets project似乎做我想要什么,但实施者不得不叉一个全新JAXB-RI得到它,似乎它不会很快被采纳的任何时间。(See this Java JIRA


我尝试了@ m0mus指定的解决方案,但必须使用sonatype存储库中的2.7.0-SNAPSHOT版本。我仍然有几个问题; 1.我必须使用@XmlElement注释java字段才能使方面出现在xsd中。 @XmlAttribute,@XmlAccessorType(XmlAccessType.FIELD)没有区别。 @图案不起作用;我不得不解决Pattern.List中的一个Pattern;

@XmlElement 
@Pattern.List(value = { @Pattern(regexp="[0-9]*") }) 
public String phoneNumber2; 

欲了解更多信息请参阅EclipseLink Forum

+0

目前不支持@XmlAttribute和@XmlAccessorType(XmlAccessType.FIELD)。 – Dmitry

回答

2

我觉得它的存在。 MOXy使用自己的SchemaGen实现从Java类生成XSD文件的过程。 SchemaGen被扩展为基于Java类中的BV注释自动生成XSD限制和构面。

/** 
* 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识别由BV API提供的注释:由于模式生成过程发生在创建的JAXBContext中,BV增强功能可开启/关闭设定上的JAXBContext以下属性(在JAXBContextProperties找到)开启,包括@ Pattern.List。如果SchemaGen遇到用@NotNull和@XmlElement(nillable = true)注解的字段,它将引发BeanValidationException.notNullAndNillable()。

样品:

Map props = new HashMap(); 
props.put("eclipselink.beanvalidation.facets", true); 
JAXBContext jc = JAXBContext.newInstance(classes, properties); 
SchemaOutputResolver sor = new MSOR(); 
jc.generateSchema(sor); 
+0

参见水平规则下面的问题的评论; – JFK

3

申请了增强的请求来处理@XMLAttribute领域:Bugs Page

你需要使用V2.7的原因是,在架构生成一些不寻常的调用树,启用facets属性值不会传播到调用树中。 5月5日是fixed。被要求回到EL v2.6 now