Глобальные привязки XJC & JAXB - подчеркивание удаления из имен перечислений - PullRequest
0 голосов
/ 30 апреля 2019

ВОПРОС:
При использовании 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>
...