当前位置: 首页 > 知识库问答 >
问题:

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

宗政楚
2023-03-14

我正在使用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注释。

我尝试了以下和其他一些调整,但在绑定。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个答案

楚丰羽
2023-03-14

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

是的,有一个annotateEnum自定义元素(参见文档)。但它只将注释应用于enum类本身,即应用于公共enum DeliveryStatus{…} 。因此,这并不能解决您的值问题,目前无法对其进行注释。

请在此处提交问题:

  • 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处理程序。唯一棘手的部分是,您需要注释的不是类而是方法,但这并不困难。我在这里对PRs开放。

希望有帮助。

 类似资料:
  • 为了进行测试,我在模式中添加了以下内容, 之后XJC开始给出以下错误, 不支持的绑定命名空间“http://annox.dev.java.net”。也许您指的是“http://java.sun.com/xml/ns/jaxb/xjc”? xjc-p com.test-classpath=“jaxb2-basics-annotate-1.0.2.jar;tools-0.4.1.5.jar;comm

  • 我正在使用jaxb2-annotate-plugin将project lombok注释添加到我生成的java代码中。在某些情况下,插件在注释中添加了可选的(在本例中是实验性的)额外信息。 注释类是lombok.noargsConstructor,它有可选的实验参数onConstructor 典型的和预期的输出应该是: 但我得到的是 我不想要添加的参数(不确定该参数的专有名词是什么),此外,这是不正

  • 我正在使用从以下依赖项导入的Swagger/OpenAPIV3注释创建应用程序的API描述: 其中一个批注是批注,它接受名为的属性,该属性允许字符串数组: 现在,我想使用在枚举类上构造的自定义方法,该方法返回允许的字符串数组,因此不需要在每次向枚举添加类型时添加该方法。以便我们可以这样使用它: 现在这是无法编译的,因为在执行注释时不知道该方法。是否有这样的解决方案允许在SwaggerV3注释属性值

  • 问题内容: 如何使用hibernate注释来验证枚举成员字段?以下内容不起作用: 问题答案: 请注意,您还可以创建一个验证器来检查String是否为枚举的一部分。 这很好,因为您不会丢失“错误值”的信息。您会收到类似的消息 值“ someBadUserType”不是有效的用户类型。有效的UserType值为:PERSON,COMPANY 编辑 对于那些想要非番石榴版本的人,它应该可以使用类似以下的

  • 问题内容: 我的Java模型上有一个枚举类型,我想映射到数据库中的表。我正在使用“hibernate注释”,但我不知道该怎么做。由于我搜索的答案比较旧,我想知道哪种方法最好? 提前致谢 问题答案: 除了注释,您还需要其他东西吗?例如,以下枚举: 可以这样使用和注释: 您可以使用批注的enum属性指定枚举应如何在数据库中持久化。指定该枚举将作为整数值保留。在这里,设置为将永久保存为0,保留为1,依此