1

次の simpleType を XJC コンパイル (JAXB パッケージから) でコンパイルすると...

<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()メソッドを除いて。public String getValue()このメソッドは、Sun の命名規則に従って呼び出されることを期待しています。そうすれば、EL を使用して JSP ページで簡単に使用できます。今、私はそれを回避する必要があります。

getValue()メソッドの代わりにメソッドを使用して、XJC コンパイルをより便利な列挙にさらに微調整した経験がある人はいますvalue()か? または、メソッドなどを追加できますか?

PS これは JAXB の v2.0.3 で発生しました。最新バージョンv2.1.8をダウンロードしましたが、同じです...

4

2 に答える 2

1

この変更を許可しているように見える JAXB 仕様には何もありません。これを行う唯一の方法は、JAXB プラグインを作成することだと思います。

于 2008-10-28T16:44:59.610 に答える
0

このメソッドの名前に対して生成されたクラスとのみ異なる、生成されたクラスの小さなバリアントを作成できます。次に、実行時に、生成されたバリアントではなく、バリアントがロードされていることを確認し、クラスローダー ゲームをプレイする必要があります。

もちろん、これが機能するのは、元の XSD が頻繁に変更されない場合のみです。

于 2012-04-06T21:51:30.587 に答える