2009-11-05 98 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:布爾」 將工作 - 留空白的建議是無效的結合模式。