![](/img/trans.png)
[英]JAXB classes generation from XSD schema results in a strange package structure
[英]Generation of XSD restrictions in a schema generated from Java JAXB annotated classes
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-facets項目似乎做了我想要的但是實現者不得不分叉一個全新的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;
有關更多信息,請參閱EclipseLink論壇
我認為它就在那里。 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);
您還可以查看xjc插件https://github.com/krasa/krasa-jaxb-tools
通過文檔,它支持XJsr303Annotations
並可以生成:
@Valid
注釋可以進一步限制為僅為定義的模式中的類型生成: -XJsr303Annotations:targetNamespace=http://www.foo.com/bar
@NotNull
注釋具有MinOccur
值> = 1的對象或具有所需用途的屬性 @Size
表示minOccurs > 1
列表 maxLength
或minLength
或長度限制, @Size
@DecimalMax
用於maxInclusive
限制 @DecimalMin
用於minInclusive
限制 @DecimalMax
用於maxExclusive
限制,啟用新參數(inclusive=false)
: - -XJsr303Annotations:JSR_349=true
@DecimalMin
用於minExclusive
限制,啟用新參數(inclusive=false)
: - -XJsr303Annotations:JSR_349=true
@Digits
如果有totalDigits
或fractionDigits
限制。 Pattern
限制, @Pattern
如果您想知道如何在構建環境中使用XJC插件( ant
, maven
, gradle
),我可能會建議您查看另一個插件的示例: immutable-xjc
所以我希望它有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.