Как аннотировать 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 здесь.

Надеюсь, поможет.

Другие вопросы по тегам