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.