【问题标题】:Java bean validation vs XSD validation for @Pattern.List@Pattern.List 的 Java bean 验证与 XSD 验证
【发布时间】:2023-03-12 12:31:01
【问题描述】:

使用 krasa-jaxb-tools jaxb-plugin,我生成了以下内容:

来自 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 Validation 验证上述字符串,则会引发错误 - 如果写成“small123”,则表示它应该大写(失败 SMALL.123[A-Za-z0-9. ]{0,27} 正则表达式),反之亦然。

结论是 XSD 验证将模式列表视为隐含逻辑 OR,而 bean 验证将它们视为逻辑 AND。

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

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

【问题讨论】:

    标签: java validation xsd bean-validation


    【解决方案1】:

    是的,问题出在插件上。

    看这里 https://github.com/krasa/krasa-jaxb-tools/issues/41(在 1.5 中修复并合并) 和这里 https://github.com/krasa/krasa-jaxb-tools/issues/54

    如果您使用的不是 1.5,也许更新可以解决您的问题。 在其他情况下,您必须等待问题 54 的合并和发布,或者在本地存储库中应用此修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-13
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 2011-01-29
      • 2011-10-03
      相关资源
      最近更新 更多