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