MOXy BeanValidation使我能够为我的JAXB类添加验证。
使用MOXy的“Bean Validation插件”我可以在生成的JAXB类中使用来自 prexisting 架构的restrictions/facets进行Bean验证。
然而,基于来自JAXB注释的java类的Bean验证注释,使用restrictions/facets生成模式的方法是什么?
XJC在执行'schema first'生成java时有一个方便的插件架构,但有没有任何等效的'java first'方法来增强生成的XSD带有额外的限制,甚至添加XML注释?在MOXy或JAXB-RI中?
MOXy非常灵活,可以在中间映射中使用,可以在模式生成期间使用吗?
jaxb-facets project似乎做了我想要的但是实现者必须分叉一个全新的JAXB-RI才能进入它,似乎它不会很快被采用。({{3} })
我尝试了@ 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;
有关详细信息,请参阅See this Java JIRA
答案 0 :(得分:3)
提交了有关处理_timer.Stop();
字段的增强请求:Bugs Page
您需要使用v2.7的原因是,在一些用于模式生成的异常调用树中,enable facets属性值不会在调用树下传播。 5月5日是fixed。被要求退回EL v2.6 now。
答案 1 :(得分:2)
我认为它就在那里。 MOXy使用自己的SchemaGen实现来处理从Java类生成XSD文件的过程。 SchemaGen已扩展为基于Java类上的BV注释自动生成XSD限制和构面。由于模式生成过程是在创建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";
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);
答案 2 :(得分:-1)
您还可以使用xjc插件https://github.com/krasa/krasa-jaxb-tools
根据文档,它支持<name>DEV</name>
并可以生成:
XJsr303Annotations
批注,可以进一步限制为仅针对已定义架构的类型生成:@Valid
-XJsr303Annotations:targetNamespace=http://www.foo.com/bar
注释,其值为@NotNull
值> = 1的对象,或具有必需用途的属性MinOccur
用于具有@Size
minOccurs > 1
,如果有@Size
或maxLength
或长度限制minLength
限制@DecimalMax
maxInclusive
限制@DecimalMin
minInclusive
的{{1}}限制,使用以下参数启用新参数@DecimalMax
:maxExclusive
(inclusive=false)
的{{1}}限制,使用以下参数启用新参数-XJsr303Annotations:JSR_349=true
:@DecimalMin
minExclusive
,如果有(inclusive=false)
或-XJsr303Annotations:JSR_349=true
限制。@Digits
(如果有totalDigits
限制如果您想知道如何在构建环境(fractionDigits
,@Pattern
,Pattern
)中使用XJC插件,我建议您看一下另一个插件的示例:immutable-xjc < / p>
所以我希望对您有帮助。