2012-10-25 40 views
1

我都只要我得到一個已知的字符串下面的架構JAXB架構設計,具有枚舉動態值

<xs:simpleType name="enumType">  
    <xs:restriction base="xs:string">  
     <xs:enumeration value="STRING_ONE"/> 
     <xs:enumeration value="STRING_TWO"/> 
    </xs:restriction> 
</xs:simpleType> 

,我可以swithc並以我jaxbObject獲得一個希望將enumType對象。但是如果我不知道這個字符串呢?有沒有辦法基於JAXB Schema來處理它?我知道基於枚舉它是不可能的。


編輯:力圖使之更加清晰

威特給定的架構設計,我jaxbObject獲得的,它接受enumType作爲參數,只能有2個輸入值,即STRING_ONE或STRING_TWO這將是轉換爲XML作爲編組的一部分。

的問題是,什麼如果,我想通過我的架構設計來處理的情況下,如果我能有enumType再優秀的對象,否則我可以給一個XML來jaxbObject獲得的,而不是enumType,它仍然解析它。

+1

不知道問題是什麼 –

+0

您是否希望將屬性從枚舉更改爲字符串,以便您可以處理多於XML模式中定義的值? –

+0

這是最後一種方法,是的,它肯定會起作用。但我想知道是否有一個選項,我們可以在模式中指定一個可以同時處理枚舉和枚舉** base **值(在本例中爲字符串)的字段。 –

回答

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_ONE和STRING_TWO的實例與其他字符串區別開來。

但我不知道jaxb是否對這個習慣用法有用,你有自己的。