JFK*_*JFK 5 java xsd jaxb moxy
MOXy BeanValidation使我能够为我的JAXB类添加验证.
使用MOXy的"Bean Validation Plugin"我可以根据来自现有 Schema的限制/方面在生成的JAXB类中进行Bean Validation .
但是有没有办法根据来自JAXB注释的java类的 Bean Validation注释生成带有限制/方面的模式?
XJC在执行'schema first'生成java时有一个方便的插件架构,但有没有任何等效的'java first'方法来增强生成的XSD带有额外的限制,甚至添加XML注释?在MOXy或JAXB-RI中?
MOXy非常灵活,可以在中间映射中使用,可以在模式生成期间使用吗?
该JAXB刻面的项目似乎做我想要什么,但实施者不得不叉一个全新JAXB-RI在得到它,它似乎不会很快通过的任何时间.(见这个Java JIRA)
我尝试了@ m0mus指定的分辨率,但必须使用sonatype存储库中的2.7.0-SNAPSHOT版本.我还有几个问题; 1.我必须用@XmlElement注释java字段以使facet出现在xsd中.@XmlAttribute,@ XmlAccessorType(XmlAccessType.FIELD)没有任何区别.@Pattern没有用; 我不得不在Pattern.List中使用单个Pattern.
@XmlElement
@Pattern.List(value = { @Pattern(regexp="[0-9]*") })
public String phoneNumber2;
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请参阅EclipseLink论坛
我认为它就在那里。MOXy 使用自己的 SchemaGen 实现来从 Java 类生成 XSD 文件。SchemaGen 经过扩展,可以根据 Java 类上的 BV 注释自动生成 XSD 限制和 Facet。由于模式生成过程是在创建 JAXBContext 时发生的,因此可以通过在 JAXBContext 上设置以下属性(在 JAXBContextProperties 中找到)来打开/关闭 BV 增强功能:
/**
* 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";
Run Code Online (Sandbox Code Playgroud)
SchemaGen 识别 BV API 提供的注释,包括 @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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2139 次 |
| 最近记录: |