如何使用jaxb2-basics-annotate注释枚举?

时间:2015-02-19 11:46:07

标签: enums jaxb maven-jaxb2-plugin jaxb2-basics jaxb2-annotate-plugin

我正在使用maven-jaxb2-plugin和jaxb2-basics-annotate插件从我的xsd自动生成POJO。我已成功在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 个答案:

答案 0 :(得分:2)

免责声明:我是jaxb2-annotate-plugin的作者。

是的,有annotateEnum个自定义元素(请参阅docs)。但它只将注释应用于枚举类本身,即public enum DeliveryStatus {...}。因此,value()无法解决您的问题,目前无法对其进行注释。

请在此处提出问题:

在这里有一个测试架构会很高兴(请给我发PR):

不幸的是,我无法承诺任何截止日期。我认为你所得到的紧固方式是试图自己实现它。看到代码的这一部分:

您基本上需要添加annotateEnumValueMethod处理程序,类似于annotateEnum的处理方式。唯一棘手的部分是你不需要注释类而不是value()方法,但这并不困难。我会在这里向PR开放。

希望它有所帮助。