@Pattern.List的JavaBean验证与XSD验证

@Pattern.List的JavaBean验证与XSD验证,java,validation,xsd,bean-validation,Java,Validation,Xsd,Bean Validation,使用KrasaJAXB工具jaxb插件,我生成了以下内容: 从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}"/

使用KrasaJAXB工具jaxb插件,我生成了以下内容:

从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>
默认验证程序(提供程序为Apache):

使用JAXB,我成功地生成了有效的XML(它通过了XSD验证——包括上述字符串的格式)。
但如果我尝试使用Bean验证来验证上面提到的字符串,它会抛出错误——如果它写为“small123”,它会说它应该大写(如果是SMALL.123[A-Za-z0-9.]{0,27}regex),反之亦然。

结论是XSD验证将模式列表视为逻辑的或隐含的,而bean验证将其视为逻辑的和

因为这个事件在我的代码中只发生过一次,所以我设法修复了它(又快又脏),但我想知道是否有更好的方法


这是插件(生成了错误的注释)、验证器或其他东西(我没有注意到)的问题吗?

是的,问题出在插件上

看这里 (固定并合并在1.5中) 这里呢

如果您不使用1.5,更新可能会修复您的问题。 在其他情况下,您必须等待54号问题的合并和发布,或者在本地回购中应用此修复

    @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;
 ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
        this.validator = factory.getValidator();