Как заставить JAXB различать элементы одного типа - PullRequest
0 голосов
/ 23 мая 2019

Я пишу программу, анализирующую схему, и у меня ее читают в схеме в объекты JAXB.Для этого я автоматически сгенерировал классы из схемы для схем XML .

Для класса Group было сгенерировано это поле, которое представляет список всех различныхконструкции, которые могут входить в группу: вложенные группы, последовательности, варианты, anys, alls и элементы.Вот сгенерированный код:

@XmlElementRefs({
@XmlElementRef(name = "group",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "sequence",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "choice",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "any",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = Any.class,
    required = false),
@XmlElementRef(name = "all",
    namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false),
@XmlElementRef(name = "element", namespace = "http://www.w3.org/2001/XMLSchema",
    type = JAXBElement.class,
    required = false) })
protected List<Object> particle = new ArrayList<>();

Проблема в том, что большинство этих элементов списка генерируются как JAXBElements, которые содержат фактический объект.Я знаю, что это происходит потому, что, например, выбор и последовательность на самом деле содержат одни и те же данные (оба типа explicitGroup, это просто имя элемента, который определяет, как интерпретировать данные).Поэтому JAXB только что создал класс ExplicitGroup и, если это выбор или последовательность, он в конечном итоге будет JAXBElement, содержащий ExplicitGroup и QName, сообщающий вам, какой это.

Я создал пользовательские классыChoice и Sequence, которые расширяются ExplicitGroup.Как я могу заставить JAXB создавать эти классы вместо использования оболочек JAXBElement?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...