2016-08-08 149 views
0

我想爲下面的XSD使用JAXB生成java類。匿名枚舉的JAXB globalBinding

我不得不使用下面的綁定文件來生成枚舉類從XS派生的任何簡單的元素:串並具有計數方面。 但是它總是產生一個字符串,而不是...

(注:我不能改變XSD)

see typeSafeEnumBase here

bindings.xjb文件:

<jaxb:bindings 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" 
     xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
     jaxb:version="2.0"> 
    <jaxb:globalBindings typesafeEnumMemberName="generateName" typesafeEnumBase="xs:string"/> 
</jaxb:bindings> 

測試。 xsd:

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema 
    targetNamespace="http://www.example.com" 
    xmlns="http://www.example.com" 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="ElementName"> 
     <xs:simpleType> 
      <xs:restriction base="xs:string"> 
       <xs:enumeration value="MY_ENUM_1"/> 
       <xs:enumeration value="MY_ENUM_2"/> 
      </xs:restriction> 
     </xs:simpleType> 
    </xs:element> 

    <xs:element name="Root"> 
     <xs:complexType> 
      <xs:sequence> 
       <xs:element ref="ElementName"/> 
      </xs:sequence> 
     </xs:complexType> 
    </xs:element> 
</xs:schema> 

命令:

xjc -verbose test.xsd -b bindings.xjb 

生成的Java類:

Root.java

回答

0

您必須添加以下綁定

<jaxb:bindings node="//xs:element[@name='ElementName']/xs:simpleType"> 
    <jaxb:typesafeEnumClass name="ElementName" /> 
</jaxb:bindings> 
+0

謝謝你的建議。 但我試圖在非常通用的層面上處理它。因此,描述「** ...從任何簡單元素派生自XS:字符串,並有枚舉方面... **」 – veepuris

+0

我想你不能..因爲你的simpleType是匿名:( – Xstian