我使用maven-jaxb2-plugin和jaxb2基础注释插件从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的东西吗?它能起作用吗?如果能,怎么做?
请帮忙。
免责声明:我是jaxb2-annotate-plugin
的作者。
是的,有一个annotateEnum
自定义元素(请参阅文档)。但它只将注释应用于枚举类本身,即public enum DeliveryStatus {...}
。因此,这并不能解决value()
的问题,目前无法对此进行注释。
请在此处提交问题:
- https://github.com/highsource/jaxb2-annotate-plugin/issues
如果这里有一个测试方案会很好(请给我发一份PR):
- https://github.com/highsource/jaxb2-annotate-plugin/blob/master/tests/issues/src/main/resources/schema.xsd
不幸的是,我不能保证任何预产期。我认为你要想获得结果,最快的方法就是自己去实现它。请参阅代码的这一部分:
- https://github.com/highsource/jaxb2-annotate-plugin/blob/master/plugin/src/main/java/org/jvnet/jaxb2_commons/plugin/annotate/AnnotatePlugin.java#L209-L229
您基本上需要添加类似于annotateEnum
的annotateEnumValueMethod
处理程序。唯一棘手的部分是,您需要注释的不是类,而是value()
方法,但这并不困难。我在这里对公关人员开放。
希望能有所帮助。