Java bean 验证 vs XSD @Pattern.List 验证
Java bean validation vs XSD validation for @Pattern.List
使用 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。
因为这个事件在我的代码中只发生过一次,所以我设法修复了它(又快又脏),但我想知道是否有更好的方法。
这是插件(生成了错误的注释)、验证器还是其他东西(我没有注意到)的问题吗?
是的,问题出在插件上。
看这里
https://github.com/krasa/krasa-jaxb-tools/issues/41(在 1.5 中修复并合并)
和这里
https://github.com/krasa/krasa-jaxb-tools/issues/54
如果您使用的不是 1.5,也许更新可以解决您的问题。
在其他情况下,您必须等待问题 54 的合并和发布或在您的本地存储库中应用此修复程序。
使用 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。
因为这个事件在我的代码中只发生过一次,所以我设法修复了它(又快又脏),但我想知道是否有更好的方法。
这是插件(生成了错误的注释)、验证器还是其他东西(我没有注意到)的问题吗?
是的,问题出在插件上。
看这里 https://github.com/krasa/krasa-jaxb-tools/issues/41(在 1.5 中修复并合并) 和这里 https://github.com/krasa/krasa-jaxb-tools/issues/54
如果您使用的不是 1.5,也许更新可以解决您的问题。 在其他情况下,您必须等待问题 54 的合并和发布或在您的本地存储库中应用此修复程序。