在由Java JAXB注释类生成的模式中生成XSD限制

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论坛

Dmi*_*try 2

我认为它就在那里。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)