2012-12-19 31 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

相关问题