使用krasa-JAXB工具JAXB的插件,我产生如下:
的Java Bean验证VS XSD验证了@ Pattern.List
从XSD架构:
<xs:simpleType name="SomethingId">
<xs:restriction base="xs:string">
<xs:pattern value="small\.123[A-Za-z0-9\.]{0,27}"/>
<xs:pattern value="SMALL\.123[A-Za-z0-9\.]{0,27}"/>
</xs:restriction>
</xs:simpleType>
我得到了注解的元素:
@XmlElement(name = "SomethingId", required = true)
@NotNull
@Pattern.List({
@Pattern(regexp = "small\\.123[A-Za-z0-9\\.]{0,27}"),
@Pattern(regexp = "SMALL\\.123[A-Za-z0-9\\.]{0,27}")
})
protected String somethingId;
默认验证器(提供商就是Apache):
ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
this.validator = factory.getValidator();
使用JAXB,我成功地生成了有效的XML(它通过了XSD验证 - 包括上述字符串的格式)。
但如果我尝试验证字符串,如上面使用Bean验证它会引发错误提及 - 如果是写“small123”它说,它应该大写(失败SMALL.123 [A-ZA-Z0-9] {0 ,27}正则表达式),反之亦然。
的结论是,XSD验证治疗模式列表仿佛逻辑或暗示了,而且Bean验证它们视为逻辑与。
由于此事件只发生在我的代码有一次,我设法解决它(快速和肮脏的),但我不知道是否有更好的方法。
这与插件(其产生错误的注释)一个问题,验证或别的东西(我没有注意到)?