Как аннотировать enum с помощью jaxb2-basics-annotate?
Я использую плагины maven-jaxb2-plugin и jaxb2-basics-annotate для автоматической генерации POJO из моего xsd. Я успешно создал аннотации в POJO. Мне нужно применить аннотацию к методу в перечислении, но я не могу понять, как это сделать.
XSD имеет,
<xsd:simpleType name="DeliveryStatus">
<xsd:restriction base="xsd:string">
<xsd:enumeration value="DeliveredToTerminal" />
<xsd:enumeration value="DeliveryUncertain" />
<xsd:enumeration value="DeliveryImpossible" />
<xsd:enumeration value="DeliveredToNetwork" />
<xsd:enumeration value="MessageWaiting" />
<xsd:enumeration value="DeliveryNotificationNotSupported" />
</xsd:restriction>
</xsd:simpleType>
сгенерированный файл
@XmlType(name = "DeliveryStatus")
@XmlEnum
public enum DeliveryStatus {
@XmlEnumValue("DeliveredToTerminal")
DELIVERED_TO_TERMINAL("DeliveredToTerminal"),
@XmlEnumValue("DeliveryUncertain")
DELIVERY_UNCERTAIN("DeliveryUncertain"),
@XmlEnumValue("DeliveryImpossible")
DELIVERY_IMPOSSIBLE("DeliveryImpossible"),
@XmlEnumValue("MessageWaiting")
MESSAGE_WAITING("MessageWaiting"),
@XmlEnumValue("DeliveredToNetwork")
DELIVERED_TO_NETWORK("DeliveredToNetwork"),
@XmlEnumValue("DeliveryNotificationNotSupported")
DELIVERY_NOTIFICATION_NOT_SUPPORTED("DeliveryNotificationNotSupported");
private final String value;
DeliveryStatus(String v) {
value = v;
}
public String value() {
return value;
}
public static DeliveryStatus fromValue(String v) {
for (DeliveryStatus c: DeliveryStatus.values()) {
if (c.value.equals(v)) {
return c;
}
}
throw new IllegalArgumentException(v);
}
}
Что мне нужно, это добавить аннотацию JsonValue к методу value выше.
Я попытался следовать и некоторые другие настройки, но в binding.xjb ничего не работает.
<jaxb:bindings node="xs:simpleType[@name='DeliveryStatus']">
<annox:annotate target="field">
<annox:annotateEnum annox:class="org.codehaus.jackson.annotate.JsonValue"/>
</annox:annotate>
</jaxb:bindings>
Есть что-то под названием annotateEnum? Может ли это работать, если да, то как?
Пожалуйста помоги.
1 ответ
Отказ от ответственности: я автор jaxb2-annotate-plugin
,
Да, есть annotateEnum
элемент настройки (см. документы). Но он применяет аннотацию только к самому классу enum, т.е. public enum DeliveryStatus {...}
, Так что это не решит вашу проблему с value()
, это не может быть аннотировано в данный момент.
Пожалуйста, отправьте вопрос здесь:
Было бы неплохо иметь тестовую схему здесь (пожалуйста, пришлите мне PR):
К сожалению, я не могу обещать никакой даты. Я думаю, что самый быстрый способ добиться результата - попытаться реализовать его самостоятельно. Посмотрите эту часть кода:
Вам в основном нужно добавить annotateEnumValueMethod
обработчик похож на то, как annotateEnum
готово. Единственная сложность в том, что вам нужно аннотировать не класс, а value()
метод, но это не сложно. Я буду открыт для PR здесь.
Надеюсь, поможет.