JAXB - 从XSD生成类 - 将枚举转换为字符串

时间:2009-11-05 13:59:04

标签: java jaxb

使用JAXB,我们直接生成Java bean。在XSD中,我们有一个枚举类型:

  <xs:simpleType name="promptBeforeCloseType">
    <xs:restriction base="xs:string">
     <xs:enumeration value="default"/>
     <xs:enumeration value="always"/>
     <xs:enumeration value="never"/>
    </xs:restriction>
  </xs:simpleType>

JAXB使用此类型为字段生成枚举类型。我们希望将它转换为生成的Java类中的String,因为这些类映射到ActionScript类,并且ActionScript中没有枚举类型。

有没有办法实现它,实现某种转换器?可能在XmlJavaTypeAdapter

3 个答案:

答案 0 :(得分:7)

您可以强制XJC不生成枚举。请参阅this document的“全局绑定声明”部分:

  

如果typesafeEnumBase设置为   xsd:string,这将是一种全局方式   指定所有简单类型   定义直接或   间接来自xsd:string并且有   枚举方面应该受到约束   默认为类型安全枚举。 如果   typesafeEnumBase设置为空   string,“”,没有简单的类型定义   将永远绑定到类型安全的枚举   默认为。

答案 1 :(得分:1)

查看JAXB教程的[覆盖数据类型] [1]部分。您可以使用类似于页面底部示例的自定义绑定文件设置来完成此操作。

我认为你不得不编写自己的转换方法(因此类),因为似乎没有一个内置的(可能是因为JAXB生成的枚举没有共同的超类) 。但是您需要做的就是在枚举对象上调用value()方法,该方法将返回映射到它的String。

[1]:https://jaxb.dev.java.net/tutorial/section_5_6_1-Overriding-the-Datatype.html#Overriding数据类型

答案 2 :(得分:1)

jaxb:globalBindings typesafeEnumBase =“xs:boolean”将起作用 - 将其留空,因为建议对绑定模式无效。