Добавить / изменить элемент в XML-файл, используя маршал JAXB - PullRequest
0 голосов
/ 05 июня 2019

Я использую JAXB для генерации Java-кода из XML с перечислением

    <xs:simpleType name="color">
    <xs:restriction base="xs:string">
        <xs:enumeration value="Blue"/>
        <xs:enumeration value="Green"/>
        <xs:enumeration value="Yellow"/>
    </xs:restriction>
</xs:simpleType>

Я хочу добавить еще пару цветов к этому перечислению, скажем, Red and White. мы не хотим обновлять xsd или сгенерированный код XML / Java, потому что они не принадлежат нам, и мы хотим сохранить их как есть.

Вариант 1. Если есть способ прочитать XSD таким образом, чтобы, когда он читал xs: simpleType name = "color", я мог добавить цвета в перечисление, поэтому сгенерированное перечисление java имеет все необходимые значения

Вариант 2. Если я могу написать адаптер, который может помочь мне добавить значения в сгенерированный Enum

Я проверил XMLAdapter, но переопределение, которое не помогает в моем случае. Поскольку это enum, мне трудно его изменить, поскольку Enums должны быть постоянными в Java

1 Ответ

0 голосов
/ 09 июня 2019

Поскольку было трудно вставить значения в перечисление, мы преобразовали элемент «color» в тип String из Enum, используя настраиваемые привязки JAXB.

<jaxb:bindings node="//xs:simpleType[@name='color']">
  <jaxb:typesafeEnumClass map="false" />
</jaxb:bindings>

Новые значения теперь могут быть вставлены. Мы понимаем, что это рискованно, поскольку теперь элемент «color» может принимать любую строку, но это работает для нас с точки зрения нашего проекта.

...