JAXB-XJC-生成された型保証列挙クラスとメンバーに影響を与える
-
03-07-2019 - |
質問
次の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()
メソッドを除きます。このメソッドは、Sunの命名規則に従って public String getValue()
と呼ばれることを期待しています。そうすれば、ELを使用してJSPページで簡単に使用できます。今、私はそれを回避する必要があります。
value()
メソッドの代わりに、 getValue()
メソッドを使用して、XJCコンパイルをさらに便利な列挙に微調整した経験はありますか?または、メソッドなどを追加できますか?
PSこれは、JAXB v2.0.3で発生しました。最新バージョンv2.1.8をダウンロードしましたが、同じバージョンです...
解決
JAXB仕様には、この変更を許可していると思われるものは何もありません。これを行う唯一の方法はJAXBプラグインを書くことだと思います。
他のヒント
生成されたクラスの小さなバリアントを作成できます。このバリアントは、このメソッドの名前に対して生成されたクラスとのみ異なります。その後、実行時に、生成されたバリアントではなくバリアントがロードされていることを確認して、クラスローダーゲームをプレイする必要があります。
もちろん、これは元のXSDが頻繁に変更されない場合にのみ機能します。
所属していません StackOverflow