1

我有以下架构

<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好的对象,否则我可以给 JAXBObject 一个 XML,而不是enumType它仍然解析它。

4

1 回答 1

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 是否对这个习语有用。在那里你自己。

于 2012-10-26T01:27:26.293 回答