2011-09-09 18 views
3

JAXBを使用して、Java Beanを直接生成します。 XSDでは、我々は、列挙型(例えば)を有する:データベースでJAXB - XSDからクラスを生成 - enumをenum名以外のカスタムtoString()に変換する

<xs:simpleType name="ColorType"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="Red"/> 
    <xs:enumeration value="Blue"/> 
    <xs:enumeration value="Green"/> 
</xs:restriction> </xs:simpleType> 

を、我々は赤、黒と緑色用のR、B及びGのようなフラグを有していてもよいです。ある意味では、フラグは1文字の単語だけです。私はそのような列挙したいです... ColorType.Red.toString()と等価ですから ...私はそれにリンクすることができますような何か。今私はいくつかの条件文を使用してenumtypeを手動でチェックしています。そして挿入中またはデータベース操作中に文字列に変換しています。

(これらのソリューションは良いものではありません、と愚か)これを解決するために、私の頭に浮かんだいくつかの愚かなソリューション は、私は一つの解決策は

<xs:enumeration value="R"> 

を使用してこの問題を解決すると思いますが、これが何であるかを私に伝えていませんR.

2番目の解決策は、ColorTypeを文字列として作成することができますが、これは私のColorTypeがデータベース内のどの色でもないZでもかまわないことを意味します。 ?:(...

この問題を解決するための任意の方法

答えて

0

これは役立つかもしれない:http://fusesource.com/docs/framework/2.1/jaxws/JAXWSCustomTypeMappingEnum.html

は、私はあなたの問題を読み違えに表示されます私が見ることができる唯一のソリューションは、生成されたクラスのtoStringメソッドをオーバーライドすることです。あなたのEnum値の最初の文字だけを返すものに置き換えてください。REDはRを返します。

+0

おかげさまで、ありがとうございました。しかし、あなたが共有しているリンクは、冒頭でenum型の値が 'xsd:string'でなければ、int型または他の型のマッピングの定義を知らせるよりもむしろそうです。しかし、私の問題は、1文字の文字列のマッピング文字:( – kinshuk4

0

当面は中間的な解決方法を使用しています。それはXSD型enumを返す。

01別の列挙型を手動でJavaで1を実現している

<xs:simpleType name="ColorType"> 
    <xs:restriction base="xs:string"> 
    <xs:enumeration value="Red"/> 
    <xs:enumeration value="Blue"/> 
    <xs:enumeration value="Green"/> 
</xs:restriction> </xs:simpleType> 

enum ColorCode{ 
    Red("R"), Green("G"), Blue("B") ; 
    private String clrCode; 
    ColorCode(String s){ 
     clrCode = s; 
    } 

    public String toString(){ 
     return clrCode; 
    } 

    public static ColorCode getColorCode(ColorType clrTypeEnum){ 
     switch(clrTypeEnum){ 
      case RED: return Red; break; 
      case BLUE: return Blue; break; 
      case GREEN: return Green; break; 
     } 
    } 
} 

は、今、私たちはというならば書くよりも、データベースに挿入するためにカラーコードを取得することができ

だから今1つのXSD列挙型(生成)を持っています - 他のコードを何度も何度も色分けします。マッパーとして別の列挙型を使用すると、stringなどの自由型の型よりも制限があります。よりよい解決策が存在する場合

少なくとも、これは私が今のうちに働いてきたソリューションですが、知らない、それは大きな助けになるだろう、もっと良いものが存在する場合、私に知らせてください:)

3

あなたが使用することができますXJB-バインディングそのため、この

<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

<jxb:bindings schemaLocation="MySchema.xsd" node="xs:simpleType[@name='ColorType']"> 
    <jxb:typesafeEnumClass> 
     <jxb:typesafeEnumMember value="Red" name="R" /> 
     <jxb:typesafeEnumMember value="Green" name="G" /> 
     <jxb:typesafeEnumMember value="Blue" name="B" /> 
    </jxb:typesafeEnumClass> 
</jxb:bindings> 

これは、所望のマッピングを含むenumを生成するなど。値にアクセスするには、生成されたvalue() -Enumのメソッドを呼び出します。 (XSDの名前がMySchema.xsdでない限り、正しいスキーマの場所をバインディングに入れることを忘れないでください)

関連する問題