2008-10-20 57 views
1

當編譯與XJC以下簡單類型編譯(從JAXB包)...JAXB - XJC - 影響產生的類型安全枚舉類和成員

<xs:simpleType name="test"> 
    <xs:annotation> 
     <xs:appinfo> 
      <jaxb:typesafeEnumClass/> 
     </xs:appinfo> 
    </xs:annotation> 
    <xs:restriction base="xs:string"> 
     <xs:enumeration value="4"> 
     <xs:annotation> 
      <xs:appinfo> 
      <jaxb:typesafeEnumMember name="FOUR"/> 
      </xs:appinfo> 
     </xs:annotation> 
     </xs:enumeration>  
     <xs:enumeration value="6"> 
     <xs:annotation> 
      <xs:appinfo> 
      <jaxb:typesafeEnumMember name="SIX"/> 
      </xs:appinfo> 
     </xs:annotation> 
     </xs:enumeration> 
    </xs:restriction> 
</xs:simpleType> 

我結束了在Java以下枚舉(進口聲明和評論刪除)

@XmlEnum 
public enum Test { 

    @XmlEnumValue("4") 
    FOUR("4"), 
    @XmlEnumValue("6") 
    SIX("6"); 
    private final String value; 

    Test(String v) { 
     value = v; 
    } 

    public String value() { 
     return value; 
    } 

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

} 

這正是我想要的......除了public String value()方法。根據Sun的命名規則,我希望該方法被稱爲public String getValue()。這樣我就可以輕鬆地在使用EL的JSP頁面中使用它。現在我不得不繞過它。

有誰有進一步調整的XJC編譯到更多有用的枚舉了getValue()方法,而不是value()方法的經驗嗎?或者我可以添加一個方法或什麼?

P.S.這發生在JAXB的v2.0.3中。我下載了最新版本v2.1.8和它的存在一樣...

回答

1

沒有什麼在這似乎讓這一變化的JAXB規範。我認爲唯一的方法是編寫一個JAXB插件。

+0

感謝沿philvarner想......目前我工作解決此我的路。我也把它發佈在JAXB論壇上(http://forums.java.net/jive/message.jspa?messageID=310818),但是沒有答案......我們會看到的。恕我直言,這是有缺陷的代碼生成。如果JAXB插件能夠工作,我會告訴你。 – 2008-11-08 10:02:16

0

您可以創建生成的類,只有從產生一個此方法的名稱不同的小變異。那麼在運行時,你必須確保你的變體被加載,而不是生成的變體,玩類加載器遊戲。

當然,這隻能是工作,原來的XSD不經常更改。