2012-12-19 69 views
3

我使用org.apache.cxf生成java類文件:cxf-xjc-plugin from xsd。我正在使用全局綁定typesafeEnumMemberName="generateName",所以當插件無法爲枚舉成員創建有效的Java標識符時,插件會爲枚舉類生成成員名稱。我可以修改typesafeEnumMemberName生成的bij cxf-xjc-plugin嗎?

我的問題是:
有沒有辦法改變這些類型安全枚舉成員名的生成方式?
例如,修改它以包含值?這樣,會員代表價值而不僅僅是一個遞增的數字。


附加信息:
的XSD我已經指定了以下簡單類型:

<xs:simpleType name="CodeBurgelijkeStaat"> 
     <xs:annotation> 
      <xs:documentation>COD366_NEN</xs:documentation> 
     </xs:annotation> 
     <xs:restriction base="xs:string"> 
      <xs:enumeration value="0"> 
       <xs:annotation> 
        <xs:documentation>Onbekend</xs:documentation> 
       </xs:annotation> 
      </xs:enumeration> 
      <xs:enumeration value="1"> 
       <xs:annotation> 
        <xs:documentation>Ongehuwd en geen geregistreerd partner en nooit gehuwd of geregistreerd partner geweest</xs:documentation> 
       </xs:annotation> 
      </xs:enumeration> 
     </xs:restriction> 
    </xs:simpleType> 

導致下面的類:

@XmlType(name = "CodeBurgelijkeStaat") 
@XmlEnum 
public enum CodeBurgelijkeStaat { 

    /** 
    * Onbekend 
    * 
    */ 
    @XmlEnumValue("0") 
    VALUE_1("0"), 

    /** 
    * Ongehuwd en geen geregistreerd partner en nooit gehuwd of geregistreerd partner geweest 
    * 
    */ 
    @XmlEnumValue("1") 
    VALUE_2("1"); 

    private final String value; 

    CodeBurgelijkeStaat(String v) { 
     value = v; 
    } 

    public String value() { 
     return value; 
    } 

    public static CodeBurgelijkeStaat fromValue(String v) { 
     for (CodeBurgelijkeStaat c: CodeBurgelijkeStaat.values()) { 
      if (c.value.equals(v)) { 
       return c; 
      } 
     } 
     throw new IllegalArgumentException(v); 
    } 
} 
+0

你找到一個解決辦法? – FkJ

回答

0

你的意思是這樣的嗎?這是由行家JAXWS完成:wsimport的插件

XSD:

<xs:simpleType name="Status"> 
       <xs:restriction base="xs:string"> 
        <xs:enumeration value="FirstStatus"/> 
        <xs:enumeration value="SecondStatus"/> 
        <xs:enumeration value="ThirdStatus"/> 
       </xs:restriction> 
      </xs:simpleType> 

生成的Java代碼:

public enum Status { 

    @XmlEnumValue("FirstStatus") 
    FIRST_STATUS("FirstStatus"), 
    @XmlEnumValue("SecondStatus") 
    SECOND_STATUS("SecondStatus"), 
    @XmlEnumValue("ThirdStatus") 
    THIRD_STATUS("ThirdStatus"); 
    private final String value; 

    Status(String v) { 
     value = v; 
    } 

... 
+0

是的,但上面提到的SimpleType不是XSD中的唯一一個,還有58個。而且,他們都有很多物品。單獨爲所有這些項目編寫綁定將是一個漫長而無聊的過程。 我現在正在考慮自動從XSD生成這些綁定。 – Peter

相關問題