【问题标题】:How to custom xjc generated enum and field name?如何自定义 xjc 生成的枚举和字段名称?
【发布时间】:2016-09-09 06:58:18
【问题描述】:

问题来了,我们的合约是 XSD 文件。最近我们希望它支持Json。但是我们必须解决一些棘手的问题。当我这样定义 xsd 时:

<xs:simpleType name="SomeType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="SomeSelfDefineType" />
  </xs:restriction>
</xs:simpleType>

生成的代码是这样的:

@XmlType(name = "SomeType")
@XmlEnum
public enum SomeType {
    @XmlEnumValue("SomeSelfDefineType")
    SOME_SELF_DEFINE_TYPE("SomeSelfDefineType")
}

使用XML的时候没问题,因为它读取注解信息,但是当我们使用Json时,SomeSelfDefineType会被转入SOME_SELF_DEFINE_TYPE。注册很多自定义Gson serializable/deserializable Interface来解决这个问题对我来说不是一个好的选择。

我已经查看了其他关于如何自定义字段或枚举名称的答案,但我确实有很多枚举定义。是否有任何插件或解决方案可以让我生成这样的代码:

@XmlType(name = "SomeType")
@XmlEnum
public enum SomeType {
    @XmlEnumValue("SomeSelfDefineType")
    SomeSelfDefineType("SomeSelfDefineType")
}

我不熟悉 JAXB 或其插件,谁能给我一些 xjb 设置或插件来解决这个问题?

【问题讨论】:

    标签: java json xml enums jaxb


    【解决方案1】:

    您可以使用.xjb 覆盖enum 值,如下所示。

    <?xml version="1.0"?>
        <jxb:bindings version="2.1" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
            xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"     jxb:extensionBindingPrefixes="xjc">
    
            <jxb:bindings schemaLocation="yours.xsd">
                <jxb:bindings
                    node="//xs:simpleType[@name='SomeType']/xs:restriction/xs:enumeration[@value='SomeSelfDefineType']">
                    <jxb:typesafeEnumMember name="SomeSelfDefineType" />
                </jxb:bindings>
            </jxb:bindings>
    
        </jxb:bindings>
    

    【讨论】:

    • 嘿伙计,问题是我有很多 Enum 类型,所以我想知道是否有更简单的方法来自定义所有 Enum 类型。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多