2009-11-05 81 views
4

使用JAXB,我们直接生成Java bean。在XSD中,我们有枚举类型:JAXB - 从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

+0

你总是可以使用enum的'toString'或'name'方法,当然? :-) – 2009-11-05 14:21:53

+0

生成的类必须具有“String”类型的字段而不是“Enum”,在其他情况下,与相应ActionScript类的映射失败。 – nicoulaj 2009-11-05 14:25:17

回答

7

您可以强制XJC不产生枚举。见this document“全球约束力的宣言”部分:

如果typesafeEnumBase设置为 的xsd:字符串,这将是一个全球性的方式 指定所有 简单类型定义直接或 从XSD派生间接:字符串并且具有 枚举构面应该由 默认绑定到类型安全枚举。 如果 typesafeEnumBase被设置为空字符串 ,“”,没有简单的类型定义 将永远被绑定到默认类型安全的枚举 类。

+8

更新的文档位置:http://download.oracle.com/javaee/5/tutorial/doc/bnbbf.html#bnbcd – 2011-01-27 19:05:38

+0

这是否仍然有效?因为我设置'typesafeEnumBase'为空字符串'“”'并且我得到错误(https://stackoverflow.com/questions/46927872/jaxb-bindings-set-typesafeenumbase-to-empty-convert-enumerations-to-strings ) – pleft 2017-10-25 12:49:59

1

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

不幸的是,由于似乎没有内置的转换方法(因此类可能由于JAXB生成的枚举没有公共超类)。但是,你需要做的就是在你的枚举对象上调用value()方法,该方法将返回映射到它的字符串。

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

1

JAXB:globalBindings typesafeEnumBase = “XS:布尔” 将工作 - 留空白的建议是无效的结合模式。