问题:
使用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>