代码之家  ›  专栏  ›  技术社区  ›  Matthew Campbell

根据javax绑定注释而不是模式进行验证

  •  4
  • Matthew Campbell  · 技术社区  · 14 年前

    一直在使用最新的jaxbsun实现,但可以依赖XJC生成正确的注释。有几个例子说明XJC没有出于逻辑原因附加XMLElement或XMLAttribute注释。另外,插件框架背后的逻辑也有问题。无论如何,我想抛弃编写模式只是为了生成pojo的想法,然后必须加载模式来验证。

    有人有办法直接验证Javax绑定注释吗?在以下位置看到了一个很酷的解决方法: how can i unmarshall in jaxb and enjoy the schema validation without using an explicit schema file

    其中动态创建模式只是为了进行验证。寻找一种直接针对注释的方法(比如Hibernate验证器和JSR 303,但是特别针对Javax绑定注释)?

    1 回复  |  直到 7 年前
        1
  •  2
  •   bdoughan    14 年前

    没有任何标准验证可以针对JAXB注释进行。实际上,这在很大程度上是因为对象模型的类型化特性减少了可能出现的无效输入的数量(例如,如果我的customer元素有一个子address元素,那么我的customer对象有一个address属性,您不能在该属性上设置address对象以外的任何内容)。

    您可能需要验证的地方是将集合限制为特定数量的元素(因为您有maxOccurs=“10”),或将字符串限制为特定长度(因为您有一个模式方面)。默认情况下,jaxb2.X(jsr222)不会在对象模型中生成这些内容(尽管您当然可以自己添加它们,就像人们使用JPA时那样)、使用jsr303并运行验证器。

    与您的问题相关的其他要点:

    1. 如果您遇到以下问题: XJC工具,请考虑 针对它记录错误:

    2. 默认值是@xmlement,因此 其中一个注释可能丢失 因为这个原因。注释是 通常只添加以调整 名称或命名空间信息。

    3. 使用JAXB(就像JPA)可以 从波乔开始。JAXB注释 可以添加以自定义XML