JAXB Schema设计,具有枚举动态值

时间:2012-10-25 19:07:26

标签: xsd jaxb schema

我有以下架构

<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而不是{{1}它仍在解析它。

1 个答案:

答案 0 :(得分: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是否对这个习语做了任何有用的事情;在那里,你自己。