如何使用 jaxb2-basics-annotate 注释枚举?
How to annotate enum using jaxb2-basics-annotate?
我正在使用 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);
}
}
我需要的是在上面的value方法中添加JsonValue注解
我尝试了以下和其他一些调整,但在 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
自定义元素(请参阅 docs)。但它只将注释应用于枚举 class 本身,即 public enum DeliveryStatus {...}
。所以这并不能解决你value()
的问题,暂时无法注释。
请在此处提交问题:
最好在这里有一个测试模式(请给我一个 PR):
很遗憾,我无法保证任何截止日期。我认为获得结果的最快方法是尝试自己实施。看这部分代码:
您基本上需要添加 annotateEnumValueMethod
处理程序,类似于 annotateEnum
的处理方式。唯一棘手的部分是您需要注释的不是 class 而是 value()
方法,但这并不困难。我将在这里接受 PR。
希望对您有所帮助。
我正在使用 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);
}
}
我需要的是在上面的value方法中添加JsonValue注解
我尝试了以下和其他一些调整,但在 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
自定义元素(请参阅 docs)。但它只将注释应用于枚举 class 本身,即 public enum DeliveryStatus {...}
。所以这并不能解决你value()
的问题,暂时无法注释。
请在此处提交问题:
最好在这里有一个测试模式(请给我一个 PR):
很遗憾,我无法保证任何截止日期。我认为获得结果的最快方法是尝试自己实施。看这部分代码:
您基本上需要添加 annotateEnumValueMethod
处理程序,类似于 annotateEnum
的处理方式。唯一棘手的部分是您需要注释的不是 class 而是 value()
方法,但这并不困难。我将在这里接受 PR。
希望对您有所帮助。