如何自定义xjc生成的枚举和字段名称?

时间:2016-09-09 06:58:18

标签: java json xml enums jaxb

这是问题,我们的合同是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设置或插件来保存这个问题吗?

1 个答案:

答案 0 :(得分:0)

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

<?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>