在由javajaxb注释类生成的模式中生成XSD限制
MOXy使我能够向JAXB类添加验证 使用MOXy的“Bean验证插件”,我可以在基于预先存在的模式生成的JAXB类中进行Bean验证 然而,有没有任何方法可以从JAXB注释的java类生成基于Bean验证注释的模式 在“模式优先”生成java时,XJC有一个方便的插件体系结构,但是是否有任何等效的“java优先”方法来增强生成的XSD并增加额外的限制,甚至添加XML注释?在MOXy或JAXB-RI中在由javajaxb注释类生成的模式中生成XSD限制,java,xsd,jaxb,moxy,Java,Xsd,Jaxb,Moxy,MOXy使我能够向JAXB类添加验证 使用MOXy的“Bean验证插件”,我可以在基于预先存在的模式生成的JAXB类中进行Bean验证 然而,有没有任何方法可以从JAXB注释的java类生成基于Bean验证注释的模式 在“模式优先”生成java时,XJC有一个方便的插件体系结构,但是是否有任何等效的“java优先”方法来增强生成的XSD并增加额外的限制,甚至添加XML注释?在MOXy或JAXB-RI中 MOXY在中间映射中是非常灵活的,在模式生成过程中可以使用吗? 这似乎是我想要的,但实现者必
MOXY在中间映射中是非常灵活的,在模式生成过程中可以使用吗? 这似乎是我想要的,但实现者必须拿出一个全新的JAXB-RI来实现它,而且它似乎不会很快被采用
我尝试了@m0mus指定的分辨率,但不得不使用sonatype存储库中的2.7.0-SNAPSHOT版本。我仍然有一些问题; 1.我必须用@XmlElement注释java字段,以使facet显示在xsd中@XmlAttribute、@XmlAccessorType(XmlAccessType.FIELD)没有区别@模式不起作用;我必须在Pattern.List中使用单个模式
@XmlElement
@Pattern.List(value = { @Pattern(regexp="[0-9]*") })
public String phoneNumber2;
有关更多信息,请参见我想它就在那里。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);
提交了增强请求以处理
@xmltattribute
字段:
您需要使用v2.7的原因是,在一些不寻常的模式生成调用树中,enable facets属性值没有向下传播到调用树。那是5月5日。要求提供ELV2.6的后端口。您也可以查看xjc插件 通过文档,它支持
xjsr303注释
,并可以生成:
注释适用于所有复杂类型,可以进一步限制为仅为定义架构中的类型生成:@Valid
-XJsr303Annotations:targetNamespace=http://www.foo.com/bar
注释,用于具有@NotNull
值>=1的对象或具有所需用途的属性minocur
用于具有@Size
minOccurs>1
如果存在@Size
或maxLength
或长度限制minLength
用于@DecimalMax
限制maxInclusive
用于@DecimalMin
限制minInclusive
对于@DecimalMax
限制,启用新参数maxExclusive
,并使用:(inclusive=false)
-xjsr303注释:JSR_349=true
对于@DecimalMin
限制,启用新参数minExclusive
,带有:(inclusive=false)
-xjsr303注释:JSR_349=true
如果存在@Digits
或totalDigits
限制fractionDigits
如果存在@Pattern
限制模式
ant
,maven
,gradle
),我可以重新编译另一个插件的示例:
因此,我希望这能有所帮助。请参阅水平线规则下方的相关评论;目前不支持@XmlAttribute和@XmlAccessorType(XmlAccessType.FIELD)。请不要只是发布一些工具或库作为答案。至少在答案本身上加以说明,我希望将答案扩展到更具代表性的具体问题上。