2016-10-04 88 views
2

使用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验证它们视为逻辑与。

由于此事件只发生在我的代码有一次,我设法解决它(快速和肮脏的),但我不知道是否有更好的方法。

这与插件(其产生错误的注释)一个问题,验证或别的东西(我没有注意到)?

回答