ВОПРОС:
При использовании xjc предоставляются файлы bindings.xjb и xsd.
У меня есть перечисление внутри моего xsd, называемого «EnumType», который содержит один элемент с именем «I24». Jaxb создает «EnumType.java» с элементом «I_24» и так
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>
Это заставляет мой enum иметь член под названием "I24" внутри моего Java-кода, и мне это нравится. НО я нуждаюсь в такого рода вещах для всех будущих случаев, когда должен быть добавлен новый член enum, например "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>