【问题标题】:JAXB Schema design, having enum dynamic valueJAXB Schema 设计,具有枚举动态值
【发布时间】:2012-10-26 09:27:26
【问题描述】:

我有以下架构

<xs:simpleType name="enumType">    
    <xs:restriction base="xs:string">    
        <xs:enumeration value="STRING_ONE"/>
        <xs:enumeration value="STRING_TWO"/>
    </xs:restriction>
</xs:simpleType>

只要我得到一个已知的字符串,我就可以将它切换到我的 jaxbobject,它需要一个 enumType 对象。但是如果我不知道这个字符串怎么办?有没有办法基于 JAXB Schema 来处理它?我知道基于枚举这是不可能的。


编辑:试图使其更清晰

对于给定的 Schema 设计,我的 JAXBObject 接受 enumType 作为参数,只能有 2 个输入值,即 STRING_ONE 或 STRING_TWO,它们将作为编组的一部分转换为 XML。

问题是,如果我想通过我的架构设计来处理这样一种情况,如果我可以拥有 enumType 的对象,那么很好,否则我可以将 XML 提供给 JAXBObject 而不是 enumType,它仍然解析它。

【问题讨论】:

  • 您是否希望将属性从枚举更改为字符串,以便可以处理比 XML 模式中定义的值更多的值?
  • 这是最后一种方法,是的,它肯定会奏效。但我想知道是否有一个选项可以让我们在模式中指定一个字段,该字段可以同时处理枚举和枚举 base 值(在这种情况下为字符串)。

标签: xsd jaxb schema


【解决方案1】:

从 XSD 的角度来看,听起来你想能够写

<xs:simpleType name="soft-enumeration">
  <xs:union>
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:enumeration value="STRING_ONE"/>
        <xs:enumeration value="STRING_TWO"/>
      </xs:restriction>
    </xs:simpleType>
    <xs:simpleType>
      <xs:union memberTypes="xs:string"/>
    </xs:simpleType>
  </xs:union>
</xs:simpleType>

这种类型包括你描述的枚举,但它会与 xs:string 联合,以便也接受其他值。如果您的架构接口允许您访问有关使用了哪个联合成员类型的信息,那么您可以使用该信息将 STRING_ONE 和 STRING_TWO 的实例与其他字符串区别对待。

但是,我不知道 jaxb 是否对这个习语有用;在那里你自己。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-01
    • 2017-06-26
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    相关资源
    最近更新 更多