Главный специалист по абстрактному классу в JAXB - PullRequest
1 голос
/ 18 января 2010

У меня есть Java-приложение, в котором я хочу сохранить данные в XML вместо базы данных.

Мы решили использовать JAXB и вместо создания файлов на основе схемы мы просто добавили аннотацииФайлы Java.

Проблема, с которой мы сталкиваемся, заключается в том, что у нас есть ArrayList абстрактного класса с именем Node.Узел имеет подклассы либо Module, либо ScreenImage.Когда мы маршалируем arraylist, это не сохраняет тип.Например:

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Module"

Поддерживает ли JAXB абстрактные элементы?

Как заставить JAXB сохранить тип, чтобы я мог его отменять?

Ответы [ 2 ]

7 голосов
/ 18 января 2010

предложение axtavt в порядке.Я просто хочу добавить другой подход.Вы можете использовать @XmlSeeAlso, где вы можете объявить другие классы, которые должны быть определены и видимы для JAXBContext.Вам нужно только объявить аннотацию внутри класса, который уже виден JAXBContext.

например:

@XmlRootElement
@XmlSeeAlso({Node.class, Module.class, ScreenImage.class})
class SomeContent {
  private List<Node> nodes;
  ///... accessors
}
3 голосов
/ 18 января 2010

Должно работать нормально. Обратите внимание, что если ваши Module и ScreenImage не статически доступны из связанных классов (то есть классов, указанных в JAXBContext.newInstance(...)), они должны быть связаны явно (добавьте их в параметры JAXBContext.newInstance(...) ).

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