当前位置: 首页 > 知识库问答 >
问题:

@pattern.list的Java bean验证与XSD验证

边健
2023-03-14

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

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

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

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

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

共有1个答案

公西鸿博
2023-03-14

是的。问题出在插件上。

请参阅https://github.com/krasa/krasa-jaxb-tools/issues/41(在1.5中修正并合并)和https://github.com/krasa/krasa-jaxb-tools/issues/54

如果您没有使用1.5,也许更新可以修复您的问题。在其他情况下,您必须等待合并和发布问题54或应用此修复在您的本地回购。

 类似资料:
  • 我有以下场景:我正在尝试处理一个表单,模型属性是一个具有String和Long属性的bean。众所周知,bean验证提供了很多注释来帮助我们确定数据的有效性。我面临的是,对于Long属性的情况,我只能使用@NotNull和另一个注释(我不记得它的名字)来强制用户输入正数。如果用户输入例如“sdf”,应用程序会抛出一个BIG异常。所以我想知道的是,如果用户在爆炸前输入了一个数字(因为我不能使用@Pa

  • 我是一个新手,我正在使用java bean验证。 我有一个java bean类,如下所示,带有null和size约束。 我的主要课程如下 当我传递长度小于4的名称时,这将引发错误。但是对于我传递的所有值,这个类都成功地执行了。让我知道我错过了什么。 提前谢谢。

  • 我有以下xml: 我在网上验证了xml,它的格式很好。接下来我做了架构: 当我尝试在线验证时,会出现以下错误:http://www.utilities-online.info/xsdvalidation/?save=72595340-b1e9-4061-a655-c6cfb9cdac44-XSD验证#。USIxpqw1pi点击按钮根据xsd验证xml并查看所有错误。有人知道如何毫无差错地解决这个问

  • 我在验证xml和xsd时遇到问题。我从xsd模式中得到这个错误。 src解决方案。4.2:解析组件“urn:id”时出错。检测到“urn:id”位于命名空间“urn:schemas microsoft com:xml-diffgram-v1”中,但此命名空间中的组件无法从架构文档中引用virtual://server/schema.xsd。如果名称空间不正确,可能需要更改“urn:id”的前缀。如

  • 问题内容: 我需要使用给定的XSD文件验证XML文件。我只需要如果验证正常就返回true,否则返回false的方法。 问题答案: 仅返回true或false(也不需要任何外部库):

  • 问题内容: 我有一个已导入xsd的wsdl,此xsd具有类似如下的限制: 因此,我想细想一下,当我通过netbeans将这个耳朵部署到glassfish上时,将对传入的数据进行验证,但事实并非如此。在将数据传递给我的@WebService对象并转换为Java对象之前,是否需要进行任何调用以确保数据经过验证。 问题答案: 使用SchemaValidation批注。 请注意,它仅适用于文档/文字样式的