JAXB сортировка исключительно из интерфейсов

У меня есть сложная иерархия интерфейсов Java, которую я хотел бы маршалировать (и не обязательно демаршировать) с помощью JAXB. Эти интерфейсы представляют объекты, которые будут возвращены из API REST JAX-RS в виде XML, JSON, YAML и т. Д. (Я использую RestEasy, который может маршировать JAXB-аннотированные типы в форматах, отличных от XML).

Проблема, кажется, в том, что JAXB в основном ориентирован на класс. Я провел много веб-исследований о трудностях с JAXB и интерфейсами, самые близкие решения былиMOXy JAXB - Сопоставить интерфейсы с XML а такжеJAXB и интерфейсные модели, Тем не менее, у меня есть две основные проблемы: а) я хочу аннотировать / работать с точки зрения интерфейсов, а не конкретных классов (которых будет несколько реализаций и содержащих значительное другое состояние, которое не должно быть маршализовано), и б) я имею несколько уровней наследования интерфейса. Вот пример интерфейсов, за исключением любых аннотаций JAXB:

interface Uuided {
  UUID getId();
}
interface Named {
  String getName();
}
interface Component extends Uuided, Named {
  Map<String, ComponentAttribute> getAttributes();
}
interface Attribute extends Named {
  Type getType();
  Object getValue();
}
interface ComponentAttribute extends Attribute {
  Component getDeclaringComponent();
}

В идеале это будет генерировать что-то вроде:

<component id="xxx" name="thing">
  <attributes>
    <componentAttribute name="color">
      <type><stringType/></type>
      <value>green</value>
      <declaringComponent idref="xxx"/>
    </componentAttribute>
  </attributes>
</component>

Понятно, что в резюме это приводит к таким проблемам, как определение наиболее производного аннотированного интерфейса, теоретически их может быть несколько. В моем случае, однако, я считаю, что конкретные классы реализуют только один интерфейс, который следует маршалировать. Unmarshaling не является необходимым, так как у меня есть отдельные классы, определяющие свойства upsert.

Итак, мой вопрос, возможно ли вообще справиться с JAXB, и если да, то как? Даже если мне нужно быть очень явным в определении привязок, адаптеров и т. Д., Я бы хотел работать в рамках JAXB, чтобы получить выгоду от всех не XML-провайдеров в RestEasy.

Ответы на вопрос(2)

Ваш ответ на вопрос