XJC和JAXB全局绑定-从枚举名称中删除下划线

时间:2019-04-30 11:29:24

标签: binding jaxb underscore.js enumeration xjc

问题:
使用xjc时,提供了bindings.xjb和xsd文件。 我在xsd中有一个枚举,称为“ EnumType”,其中包含一个名为“ I24”的元素。 Jaxb使用“ I_24”元素创建“ EnumType.java”,因此

EnumType.valueOf("I24")

引发异常。


我尝试过的事情:

我有以下xsd:

<xs:simpleType name="EnumType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="I24" />
    </xs:restriction>
</xs:simpleType>

我有以下bindings.xjb:

<jaxb:bindings xmlns:jaxb="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" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:annox="http://annox.dev.java.net" xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" jaxb:extensionBindingPrefixes="xjc annox" version="2.1">

    <jaxb:bindings schemaLocation="xsdFile.xsd">
        <jaxb:bindings node="//xs:simpleType[@name='EnumType']/xs:restriction/xs:enumeration[@value='I24']">
            <jaxb:typesafeEnumMember name="I24"/>
        </jaxb:bindings>
    </jaxb:bindings>

</jaxb:bindings>

这使我的枚举在我的Java代码中有一个名为“ I24”的成员,我喜欢它。但是在以后所有必须添加新的枚举成员(例如“ X24”)的情况下,我都需要这种东西。


我想做什么
我希望所有生成的枚举名称都与在XSD中指定的名称完全相同,而不在xjb文件中提供所有枚举名称。

此外,我生成的类必须实现Serializable,因此我制作了一个xjb文件,如下所示,可以满足最后一个要求。我必须扩展此文件才能完成枚举名称强制:

<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xs="http://www.w3.org/2000/10/XMLSchema-instance" xs:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" jaxb:version="2.0">

    <jaxb:globalBindings fixedAttributeAsConstantProperty="true">
        <jaxb:serializable uid="1" />
    </jaxb:globalBindings>
</jaxb:bindings>

0 个答案:

没有答案